南阳理工oj 746 整数划分(四) 区间dp

来源:互联网 发布:freebsd 在线安装软件 编辑:程序博客网 时间:2024/06/06 14:19


http://acm.nyist.net/JudgeOnline/problem.php?pid=746


区间dp


#include <bits/stdc++.h>using namespace std ;typedef long long ll ;char read[40] ;int re[40] ;ll val[40][40] ;ll dp[40][40] ;int main(){    int T ; scanf("%d" , &T) ;    while(T --){        ll b ;        memset(read ,0 , sizeof(read)) ; memset(re , 0 , sizeof(re)) ;        scanf("%s %lld" , read , &b) ;        int len = strlen(read) ;        ll ans = 0 ;        b -- ;        for(int i = 0 ; i < len ; i ++ ) re[i] = read[i] - '0' ;        memset(val , 0 , sizeof(val)) ; memset(dp , 0 , sizeof(dp)) ;        for(int i = 0 ; i < len ; i ++ ){            val[i][i] = re[i] ;            for(int j = i + 1 ; j < len ; j ++ ){                val[i][j] = val[i][j-1]*10 + re[j] ;            }        }        for(int i = 0 ; i < len ; i ++ ) dp[i][0] = val[0][i] ;        for(int mul = 1 ; mul <= b ; mul ++ ){            for(int r = mul ; r < len ; r ++ ){///at least the blank for multiply                for(int l = 0 ; l < r ;l ++ ){                    dp[r][mul] = max(dp[r][mul] , dp[l][mul-1] * val[l+1][r]) ;                }            }        }        printf("%d\n" , dp[len-1][b]) ;    }    return 0 ;}

原创粉丝点击