NYOJ-746整数划分(四)
来源:互联网 发布:新浪微博推广淘宝产品 编辑:程序博客网 时间:2024/06/05 06:51
整数划分
题目链接
经典区间DP问题,但是和石子合并又有些区别
石子合并的dp并不适合套用在这道题上
这道题从开头开始dp,不是从中间抽取来dp
dp找上个状态,如果从按照石子合并的思路,这样找上个状态是非常困难的
dp[i][j]记录的是从开头到第i位数,加上j个乘号后的最大值
还有一个预处理也非常重要,可以把时间复杂度优化一下
就是把所有的从i到j的数的大小存起来··(具体看代码)
#include <iostream>#include<cstdio>#include<cstring>using namespace std;long long n,a[22][22],f[22][22];int m,len;void init()//预处理,更快更方便的找出{ long long tmp=n; len=0; int pos[22]; while(tmp) //把每位数提取出来 { len++; pos[len]=tmp%10; tmp/=10; } // printf("n=%lld",n); for(int i=1; i<=len/2; i++)//把位置调正 swap(pos[i],pos[len+1-i]); // for(int i=1;i<=len;i++) printf("%d ",pos[i]); memset(a,0,sizeof(0)); for(int i=1; i<=len; i++)//然后打表,把从i位到j位的数字是多少打到a数组里面 for(int j=i; j<=len; j++) a[i][j]=a[i][j-1]*10L+pos[j]; // for(int i=1;i<=len;i++)for(int j=i;j<=len;j++)printf("i=%d,j=%d,a=%lld\n",i,j,a[i][j]);}long long max(long long a,long long b){ return a>b?a:b;}int main(){ // freopen("cin.txt","r",stdin); int t; scanf("%d",&t); while(t--) { scanf("%lld%d",&n,&m); init(); memset(f,0,sizeof(f)); for(int i=1; i<=len; i++) f[i][1]=a[1][i]; for(int i=2; i<=len; i++) //表示这个数前i位 for(int j=2; j<=m&&j<=i; j++) //分成j段 for(int k=1; k<i; k++) //拆分前一部分的结尾位置 if(j==2) f[i][j]=max(f[i][j],a[1][k]*a[k+1][i]); else f[i][j]=max(f[i][j],f[k][j-1]*a[k+1][i]); // for(int i=1;i<=len;i++) for(int j=1;j<=m&&j<=i;j++) printf("i=%d j=%d f=%lld\n",i,j,f[i][j]); printf("%lld\n",f[len][m]); } return 0;}
阅读全文
1 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整数划分(二)
- could not be set to a 'string' value. You must set this property to a non-null value of type
- Oracle中connect,resource角色权限
- 判断一个节点是否在一棵二叉树中&&判断一颗二叉树是是否是另一颗树的子树
- 设备管理器
- Js中的深拷贝与浅拷贝
- NYOJ-746整数划分(四)
- 偶串
- Java 生成word模板
- Swift中的willSet与didSet
- 系统延时任务与定时任务
- 解决:hibernate 生成MySQL表 无外键
- 算法array-3-628. Maximum Product of Three Numbers
- 重入锁的理解
- Vmware虚拟机设置静态IP地址