整数划分(四)
来源:互联网 发布:信用评分卡模型python 编辑:程序博客网 时间:2024/05/16 02:43
整数划分(四)
http://acm.nyist.net/JudgeOnline/problem.php?pid=746
题意:给一个数字n,把这个数字划分成m段,求各段乘积的最大值。
思路:区间dp。
注意各个地方的下标。
枚举到第i次划分的时候,应该从j=i-1开始扫描,因为此时是i个数字划分成i段,如果数字个数小于i,那么这一段最终划分结果肯定是0,没有必要去枚举了。
#include<cstdio>#include<iostream>#include<cstring>#include<map>#include<set>#include<algorithm>#include<sstream>#include<string>using namespace std;typedef long long ll;ll a[70][70];ll dp[70][70];char ss [70];int m;int main(){ int T; scanf("%d",&T); getchar(); while(T--) { memset(ss,0x3f,sizeof ss); scanf("%s",ss); scanf("%d",&m); int n=strlen(ss); // printf("strlen:%d\n",n); memset(a,0,sizeof a); int zero=0; for(int i=0;i<n;i++) { if(ss[i]=='0') zero=1; for(int j=i;j<n;j++) { if(j!=i) a[i][j]=a[i][j-1]*10+ss[j]-'0'; else a[i][j]=ss[j]-'0'; } } if((zero&&(n==m))||(n<m)) { puts("0"); continue; } memset(dp,0,sizeof dp); for(int i=0;i<n;i++) { dp[i][0]=a[0][i]; } // int ans=a[0][n-1]; for(int i=1;i<m;i++) { for(int j=i-1;j<n;j++) { for(int k=0;k<j;k++) dp[j][i]=max(dp[j][i],dp[k][i-1]*a[k+1][j]); } }// for(int i=0;i<n;i++)// {// for(int j=0;j<m;j++)// {// printf("dp[%d][%d]=%lld\n",i,j,dp[i][j]);// }// } printf("%lld\n",dp[n-1][m-1]); } return 0;}
0 0
- 整数划分(四)
- 整数划分(四)
- 整数划分(四)
- 整数划分(四)
- nyoj746整数划分(四)
- NYOJ746 整数划分(四)
- nyoj746 整数划分(四)
- nyoj_746 整数划分(四)
- nyoj746 整数划分(四)
- 整数划分(四)+经典问题
- NYOJ746——整数划分(四)
- nyoj746整数划分(四)【区间dp】
- NYOJ 746 整数划分(四)
- NYOJ746——整数划分(四)
- nyoj746整数划分(四)【区间dp】
- nyoj746 整数划分(四)【区间dp】
- NYOJ-746整数划分(四)
- 整数划分四
- tjut 3450
- 八皇后问题的全排列解法
- MarkDown语法大全
- uva1354 枚举二叉树
- hexo+coding搭建博客
- 整数划分(四)
- 自动装箱与自动拆箱
- Android学习之使用手机网络和GPS定位
- Centos下PHP配置sublime+xdebug
- mybatis 在xml文件中处理大于号小于号的方法
- POJ - 3411 Paid Roads (状态压缩DP)
- 多栏布局与盒布局
- assertion 断言验证的一点介绍
- lucene如何索引10亿级别的关键词