nefu1018数组游戏2

普普通通的一个小DP,只不过变成了数字可以变成10-a[i],跟之前的什么穿越幽谷,步步惊心有什么区别==,为什么比赛的时候就没有想到是动态规划!!!

而且 审题啊!!题里说n是10^6不是a是10^6啊!!RE了两次居然都没发现!!

还有题中说“该操作选定一个区间,将区间内的数 改成 s[i] = (10-s[i])”所以b[i]=(10-a[i]+'0')-a[i]+'0';而不是做差再模10啊!!

就不能长点心吗。。。。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

const int maxn = 1e6+10;

char a[maxn];
int b[maxn],dp[maxn];

int main()
{
    int n;
    while(~scanf("%d",&n)){
        int ans = 0;
        scanf("%s",a);
        for(int i=0;i<n;i++){
            b[i]=(10-a[i]+'0')%10 - (a[i]-'0');
            ans+=a[i]-'0';
        }
        dp[0]=max(0,b[0]);
        int maxn = max(dp[0],0);
        for(int i=1;i<n;i++)
            dp[i]=max(dp[i-1]+b[i],b[i]),maxn=max(dp[i],maxn);
        printf("%d\n",ans+maxn);
    }
    return 0;
}


你可能感兴趣的:(nefu1018数组游戏2)