UVa 11258 String Partition(DP)

来源:互联网 发布:淘宝关键词怎么写 编辑:程序博客网 时间:2024/05/17 01:39

题意:

每组数据由一串不超过200个字符的字符串构成,问把它们分成不超过int类型的数,组合起来最大和是多少?

思路:

dp[i]表示前i个字符能组成的最大数

AC代码

#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <cstdlib>using namespace std;typedef long long ll;const int INF = 0x7fffffff;const int N = 205;char num[N];ll sum[N][N] ,dp[N];void init() {    memset(sum,0,sizeof(sum));    memset(dp,0,sizeof(dp));}int main() {    int T;    ll tmp;    scanf("%d", &T);    while(T--) {        init();        scanf("%s",num+1);        int len = strlen(num+1);        for(int i= 1; i <= len; i++) {            tmp = 0;            for(int j = i; j <= len; j++) {                tmp = tmp * 10 + (num[j] - '0');                if(tmp > INF) {                    sum[i][j] = 0;                    break;                }                sum[i][j] = tmp;            }        }        for(int i = 1; i <= len; i++) {            for(int j = 0; j < i; j++) {                dp[i] = max(dp[i],dp[j] + sum[j+1][i]);            }        }        printf("%lld\n",dp[len]);    }    return 0;}
0 0