CF1030C

CF1030C

質問の意味:

各桁が結果の和に等しくなるように、彼は、k個のセクションに各セクションを分割することができれば、あなたに番号を付け、尋ねました。

ソリューション:

デジタルDPを考えてみましょう。
暴力はすべてのビットが条件を満たして考えます

コード:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>

using namespace std;

int n,sum;
char s[105];
int num[105];

int main() {
    scanf("%d",&n);
    scanf("%s",s+1);
    for(int i = 1 ; i <= n ; i++) {
        sum += (int)s[i] - '0';
        num[i] = (int)s[i] - '0';
    }
    if(sum == 0) {
        puts("YES");
        return 0;
    }
    for(int i = 1 ; i <= sum ; i++) {
        int now = 0 , zz = 1 , ds = 1;
        while(now < i && zz <= n) {
            now += num[zz];
            if(now > i) break;
            if(zz == n) {
                if(ds >= 3 && now == 0) {
                    puts("YES");
                    return 0;
                }
            }
            if(now == i) {
                if(ds != 1 && zz == n) {
                    puts("YES");
                    return 0;
                }
                ds++;
                now = 0; 
            }
            zz++;
        }
    }
    printf("NO\n");
    return 0;
}

おすすめ

転載: www.cnblogs.com/Repulser/p/11421268.html
おすすめ