NYOJ 746 整数划分(四) (区间dp)
来源:互联网 发布:上海网站推广优化公司 编辑:程序博客网 时间:2024/06/16 08:14
整数划分(四)
时间限制: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的位数); - 输出
- 输出每组测试样例结果为一个整数占一行
- 样例输入
2111 21111 2
- 样例输出
11
121
思路:
1.用num[i][j]记录从i到j位置所组成的数
2.dp[i][j]表示在前i个数中插入j个*的最大值
3.dp[i][j]=max(dp[i][j],dp[k][j-1]*num[k+1][i]);//表示在k位置插入了一个*
代码:
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int main(){ int n;int t;char str[30];long long num[30][30];long long dp[30][30];scanf("%d",&t);while(t--){memset(num,0,sizeof(num));memset(dp,0,sizeof(dp)); scanf("%s%d",&str,&n); int len=strlen(str); for(int i=0;i<len;i++) { num[i][i]=str[i]-'0'; for(int j=i+1;j<len;j++) { num[i][j]=num[i][j-1]*10+str[j]-'0'; } } for(int i=0;i<len;i++) dp[i][0]=num[0][i]; for(int j=1;j<n;j++) { for(int i=j;i<len;i++)//i>=j,i<len { for(int k=0;k<i;k++){ dp[i][j]=max(dp[i][j],dp[k][j-1]*num[k+1][i]);//k位置上插了一个*} } } printf("%lld\n",dp[len-1][n-1]); } }
0 0
- nyoj 整数划分(四) 746 (区间DP)
- NYOJ 746 整数划分(四)详解 (区间DP)
- NYOJ 746 整数划分(四) (区间dp)
- nyoj 746 整数划分(四)(区间DP)
- NYOJ 746 整数划分(四)(区间dp)
- NYOJ 746 整数划分(四)区间DP
- nyoj 746整数划分(四) 区间DP
- NYOJ 746 整数划分(区间DP)
- nyoj746整数划分(四)【区间dp】
- nyoj746整数划分(四)【区间dp】
- nyoj746 整数划分(四)【区间dp】
- 南阳理工oj 746 整数划分(四) 区间dp
- nyoj+区间dp整数划分
- NYOJ 746 整数划分(四)
- NYOJ-746整数划分(四)
- NYOJ746:整数划分(四)(区间dp)
- nyistOJ-整数划分(四)(区间DP)
- NYOJ746 整数划分(四)(深搜DFS,区间DP)
- php清除BOM
- python环境配置和包安装时候可能会用到的命令
- MySQL
- SQL Server统计表的行数
- 士兵杀敌(三)(区间求最值)
- NYOJ 746 整数划分(四) (区间dp)
- jdbc-odbc桥接方式连接数据库
- 排序算法
- Mac版MySQL插入中文乱码解决方案
- PHP的逻辑运算符$$
- idea中怎么忽略(ignore)掉 .idea等文件
- ORA-01460: 转换请求无法实现或不合理
- 洛谷 1305——新二叉树
- "Host '192.168.1.104' is not allowed to connect to this MySQL server"