整数划分
来源:互联网 发布:iphone6网络连接不上 编辑:程序博客网 时间:2024/05/16 09:23
整数划分
Description
如何把一个正整数
Input
第一行一个正整数
接下来
Output
对于每组数据
第一行输出最大值。
第二行输出划分方案,将
Sample Input
1
199 2
Sample Output
171
19 9
Solution
设
其中
至于求方案,则记录每次的决策即可。
Code
#include <iostream>#include <cstdio>#include <cstring>#define Max(x,y) ((x)>(y)?(x):(y))#define LL long longusing namespace std;char n[50];LL m;LL a[50][50];LL f[50][50];LL g[50][50];LL nxt[50];void work(LL x,LL y){ if(g[x][y]==-1)return; nxt[++nxt[0]]=g[x][y]; work(g[x][y],y-1);}int main(){ freopen("separate.in","r",stdin); freopen("separate.out","w",stdout); LL t; scanf("%lld",&t); while(t--){ nxt[0]=0; memset(g,-1,sizeof g); memset(f,-1,sizeof f); scanf("%s%lld",n,&m);m--; LL l=strlen(n); for(LL i=0;i<l;i++){ a[i][i]=n[i]-'0'; for(LL j=i+1;j<l;j++) a[i][j]=a[i][j-1]*10+n[j]-'0'; } for(LL i=0;i<l;i++){ f[i][0]=a[0][i]; g[i][0]=-1; } for(LL i=0;i<l;i++) for(LL j=1;j<=m;j++) for(LL k=0;k<i;k++){ if(f[k][j-1]!=-1&&f[k][j-1]*a[k+1][i]>f[i][j]){ f[i][j]=f[k][j-1]*a[k+1][i]; g[i][j]=k; } } printf("%lld\n",f[l-1][m]); work(l-1,m); for(LL i=0;i<l;i++){ printf("%c",n[i]); if(nxt[0]!=0&&i==nxt[nxt[0]]){ printf(" "); nxt[0]--; } } printf("\n"); } return 0;}
0 0
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分:
- 整数划分
- 整数划分
- 整数划分
- Java开发中的23种设计模式详解(转)
- java项目配置jdbc.porperties时要注意jdbc.url的配置方式
- MYSQL慢查询日志开启和查询工具
- 整合springMVC+mybatis
- Neural Networks and Deep Learning 学习笔记(六)
- 整数划分
- iOS 从一串文字中找到某个文字,设置某文字的颜色/富文本问题
- Jenkins自动化测试:使用临时文件实现不同测试用例间的变量传递_20160624_七侠镇莫尛貝
- Qt tcp socket编程
- 数据库select的几个特殊用法
- 安卓各种权限大全
- HTTP状态码大全
- mysql强制使用索引与不使用索引
- Ubantu 配置Samba实现文件共享