NYOJ 746 整数划分(四)
来源:互联网 发布:python 替换 16进制 编辑:程序博客网 时间:2024/06/05 09:01
整数划分(四)时间限制:1000 ms | 内存限制:65535 KB难度:3描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近遇到了一个难题,让他百思不得其解,他非常郁闷。。亲爱的你能帮帮他吗? 问题是我们经常见到的整数划分,给出两个整数 n , m ,要求在 n 中加入m - 1 个乘号,将n分成m段,求出这m段的最大乘积输入 第一行是一个整数T,表示有T组测试数据 接下来T行,每行有两个正整数 n,m ( 1<= n < 10^19, 0 < m <= n的位数);输出 输出每组测试样例结果为一个整数占一行样例输入 2 111 2 1111 2样例输出 11 121#include<cstdio> #include<cstdlib> #include<cstring> using namespace std; long long t,dp[25][25]; long long num[25][25]; char str[25]; long long MAX(long long a,long long b) { return a>b?a:b; } int main() { int i,j,k,m; scanf("%lld",&t); while(t--) { scanf("%s%d",str,&m); int l=strlen(str);m--; memset(dp,0,sizeof(dp)); memset(num,0,sizeof(num)); for(i=0;i<l;++i) { num[i][i]=str[i]-'0'; for(j=i+1;j<l;++j) { num[i][j]=num[i][j-1]*10+str[j]-'0';//求第i+1到第j+1位所组成的数 } } for(i=0;i<l;++i) { dp[i][0]=num[0][i]; } for(i=1;i<=m;++i)//加入乘号数 { for(j=i;j<l;++j)//前j位 { for(k=0;k<j;++k) { dp[j][i]=MAX(dp[j][i],dp[k][i-1]*num[k+1][j]); //先算出第一纵列的最大数乘,再进行比较出第二纵列的最大数乘 } } } printf("%lld\n",dp[l-1][m]); } return 0; } 思路详解:如上
0 0
- NYOJ 746 整数划分(四)
- NYOJ-746整数划分(四)
- nyoj 整数划分(四) 746 (区间DP)
- NYOJ 746 整数划分(四)详解 (区间DP)
- NYOJ 746 整数划分(四) (区间dp)
- nyoj 746 整数划分(四)(区间DP)
- NYOJ 746 整数划分(四)(区间dp)
- NYOJ 746 整数划分(四)区间DP
- nyoj 746整数划分(四) 区间DP
- 经典问题一.(插入乘号的整数划分)整数划分(四) nyoj 746
- NYOJ 746 整数划分(区间DP)
- 【NYOJ 745】整数划分(四) (DP)
- 整数划分(四)
- 整数划分(四)
- 整数划分(四)
- 整数划分(四)
- NYOJ - 整数划分(二)
- nyoj整数划分(二)
- HDOJ 2647 Reward (反向拓扑排序)
- php使用curl访问https示例分享
- Android笔记
- 归并排序
- java.lang.Thread.State类详解
- NYOJ 746 整数划分(四)
- HDU 4513 吉哥系列故事——完美队形II(Manacher算法最大回文长度 && 两侧沿中点递减)
- 66 Plus One
- iOS UI14_GET-POST
- 华为OJ平台试题 —— 数组:字符串反转
- android退出应用程序的几种方法
- hdu2454 Degree Sequence of Graph G(havel定理)
- vi常用快捷键
- HDOJ 1242 Rescue【BFS】