A-Clam and Fish(贪心)
题目链接:https://ac.nowcoder.com/acm/contest/5668/A
简要题意:
小月有n单位的时间都在钓鱼,每个单位时间有4种状态,有蛤蜊/没蛤蜊,有鱼/没鱼。小月事先知道这n个时间点的状态。每个时间点有四种可能的动作:
1.若该时间点有鱼,则可以直接钓鱼。
2.若该时间点有蛤蜊,则可以用该蛤蜊制作一个鱼饵。
3.若该时间点身上有至少一个鱼饵,则可以用一个鱼饵钓一条鱼,钓完后就少了一个鱼饵。
4.什么都不做。
请问小月最多可以钓多少条鱼。
解题思路:
贪心,从时间早考虑到时间晚,有蛤蜊的时候就做鱼饵,没蛤蜊的时候就尝试用鱼饵钓鱼,最后若发现有x包鱼饵,就把制作比较晚的x/2包鱼饵的时间拿来钓鱼。我当时的想法与此相同,不过我是在过程中去维护后面有多少1,搞得自己很麻烦。
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e6+7;
char s[maxn];
int main()
{
int t;
cin >> t;
while(t--)
{
int n;
scanf("%d",&n);
scanf("%s",s);
int ans= 0, res = 0;
for(int i = 0; i < n; i++) {
if(s[i] == '2' || s[i] == '3')
ans++;
else if(s[i] == '0')
{
if(res != 0)
res--, ans++;
}
else {
res++;
}
}
if(res) res/=2;
ans+=res;
printf("%d\n",ans);
}
}2020牛客暑期多校训练营(第三场) 文章被收录于专栏
~

