zoukankan      html  css  js  c++  java
  • uva11258 String Partition(DP)

    dp[x]表示1-x的划分最大和,最多从前面10个位置转移过来

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <string>
    #include <sstream>
    #define ll long long
    #define MAX_INT 2147483647
    using namespace std;
    int n,l;
    string s;
    ll dp[210],num[210][210];
    ll DP(int x){
        if(x<=9&&num[0][x]<=MAX_INT) return num[0][x];
        if(dp[x]!=-1) return dp[x];
        ll ret=0;
        for(int i=x-9;i<=x;i++){
            if(num[i][x]<=MAX_INT) ret=max(ret,DP(i-1)+num[i][x]);
        }
        return dp[x]=ret;
    }
    int main(){
        //freopen("11258","r",stdin);
        scanf("%d",&n);
        getchar();
        for(int i=0;i<n;i++){
            getline(cin,s);
            memset(dp,0,sizeof dp);
            l=s.length();
            for(int i=0;i<l;i++){
                for(int j=i;j<l;j++){
                    num[i][j]=s[j]-'0';
                    for(int k=i+1;k<=j;k++){
                        num[i][k]=num[i][k-1]*10+s[k]-'0';
                    }
                }
            }
            for(int i=0;i<9;i++) dp[i]=num[0][i];
            for(int i=9;i<l;i++){
                for(int j=i-9;j<=i;j++){
                    if(num[j][i]<=MAX_INT) dp[i]=max(dp[i],dp[j-1]+num[j][i]);
                }
            }
            printf("%lld
    ",dp[l-1]);
        }
        return 0;
    }
    uva11258
  • 相关阅读:
    【转】5亿个数找中位数
    C++二维数组名的再探索
    转载 图像卷积
    PowerDesigner的使用一
    Spring注解详解
    JSP页面以及简单的指令
    Javascript学习总结
    html第一天
    Chrome开发,debug的使用方法。
    SVN使用
  • 原文地址:https://www.cnblogs.com/wonderzy/p/3540707.html
Copyright © 2011-2022 走看看