题目链接:https://vjudge.net/problem/CodeForces-1204D1
转自:https://www.cnblogs.com/caijiaming/p/11388982.html
题意:有一个01串,求一个01串,并且满足:0的数量尽可能地多,任意相同区间内的不下降子序列长度相等。注意子序列和子串的区别。
思路:从后往前推。遍历字串s,如果当前位置pos后面1的数量大于0的数量,并且这一位是1,那么这一位就可以变成0,对后面的不下降子序列是不影响的。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
int l=s.length();
int sum=0;
for(int i=l-1; i>=0; i--)
{
if(s[i]=='0')
sum++;
else if(s[i]=='1'&&sum)
sum--;
else
s[i]='0';
}
cout<<s;
return 0;
}