CF1030C
CF1030C
题意:
给你一个数字,问能否拆分成k段,使得每一段的每一位数字相加结果相等。
解法:
考虑数位DP。
暴力按位考虑每一位是否满足条件
CODE:
#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;
}
有些路你和某人一起走,就长得离谱,你和另外一些人走,就短得让人舍不得迈开脚步。