P5650 基础字符串练习题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
思路
- 如果
S[i] == '0'
,则dp[i] = max(dp[i-1] + 1, 1)
(因为增加了0
,减少了1
)。 - 如果
S[i] == '1'
,则dp[i] = max(dp[i-1] - 1, -1)
(因为减少了1
,可能需要减少0
来保持差值最大)。
( dp )
ac代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)const ll N=1e5+10;
char a[N];int main()
{IOS;cin>>a;ll i=strlen(a);//cout<<i<<"here";int dp[N];if(a[0]=='0') dp[0]=1;else dp[0]=-1;ll j;int ans=-1;for(j=1;j<i;j++){if(a[j]=='0') dp[j]=max(dp[j-1]+1,1);else if(a[j]=='1') dp[j]=max(dp[j-1]-1,-1);}for(j=0;j<i;j++) ans=max(ans,dp[j]);cout<<ans<<endl;return 0;
}