题意:在给出的字符串中,分成若干个串,求最大的和是多少,单个数字不能超过int 的最大值,d[i]表示前i位的最大和,枚举每一位,还有就是位数最大不超过10
#include <iostream>
#include <cstdio>
#include <cstring>
#include <limits.h>
using namespace std;
const int MAXN = 205;
const int INF = INT_MAX;
long long d[MAXN];
char str[MAXN];
long long dp(int n){
for (int i = 1; i <= n; i++)
d[i] = -INF;
d[0] = 0;
for (int i = 1; i <= n; i++){
for (int j = 1; j <= 10 && j <= i; j++){
long long num = 0;
for (int k = 0; k < j; k++){
num = num * 10 + str[i-j+k] - '0';
if (num >= 0 && num < INF)
d[i] = max(d[i],d[i-j]+num);
}
}
}
return d[n];
}
int main(){
int t;
scanf("%d",&t);
while (t--){
scanf("%s",str);
int n = strlen(str);
printf("%lld\n",dp(n));
}
return 0;
}