题意:
一个人的IQ为q,有n场比赛,第i天只能参加第i场比赛,如果比赛难度大于IQ,那么IQ就会下降,如果IQ为0就不能参加比赛了,问最多能参加多少场比赛?输入一个01串,0表示不参加,1表示参加
思路:
贪心的讲:如果最后一场比赛结束的时候IQ刚好为0,那么我们参加的比赛数是最多的。
所以我们可以倒着往前推来求解(解释如下)
若当前的q小于ai,那么我们就让当前的q++,那么这样子是我们后面的比赛都能参加的最优解
#include<bits/stdc++.h>
using namespace std;
int a[100005];
int vis[100005];
int main()
{
int t;
cin>>t;
while(t--)
{
int n,q;
cin>>n>>q;
for(int i=0;i<n;i++)
{
cin>>a[i];
vis[i]=0;
}
int k=0;
for(int i=n-1;i>=0;i--)
{
if(k>=a[i])
vis[i]=1;
else if(k<q)
{
vis[i]=1;
k++;
}
else if(k>q)
break;
}
for(int i=0;i<n;i++)
{
cout<<vis[i];
}
cout<<endl;
}
}