整数划分
来源:互联网 发布:羊毛刷批发淘宝网 编辑:程序博客网 时间:2024/05/16 02:01
问题描述 Description
如何把一个正整数
输入描述 Input Description
第一行一个正整数
接下来
输出描述 Output Description
对于每组数据
第一行输出最大值。
第二行输出划分方案,将
输入样例 Sample Input
1
199 2
输出样例 Sample Output
171
19 9
分析 I Think
设
输出方案就直接把前面的步骤倒过来就可以了,枚举
代码 Code
#include <cstring>#include <cstdio>#include <algorithm>using namespace std;typedef long long LL;char str[50];LL f[50][50];int length,m,t;LL a[50][50];void display(int,int);int main(){ scanf("%d",&t); while( t-- ){ getchar(); scanf("%s%d",str+1,&m); length = strlen(str+1); for(int i=1;i<=length;++i) a[i][i] = str[i]-'0'; for(int i=1;i<=length;++i) for(int j=i+1;j<=length;++j) a[i][j] = a[i][j-1]*10+a[j][j]; memset(f,0,sizeof f); for(int i=1;i<=length;++i) f[i][1] = a[1][i]; for(int i=2;i<=m;++i) for(int j=i;j<=length;++j) for(int k=i-1;k<j;++k) f[j][i] = max(f[j][i],f[k][i-1]*a[k+1][j]); printf("%lld\n",f[length][m]); display(length,m); putchar(10); } return 0;}void display(int L,int M){ if(M == 1){ printf("%lld ",a[1][L]); return ; } for(int k=M-1;k<L;++k) if(f[L][M] == f[k][M-1]*a[k+1][L]){ display(k,M-1); printf("%lld ",a[k+1][L]); break; }}
0 0
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分:
- 整数划分
- 整数划分
- 整数划分
- 嵌入式学习-uboot-lesson4.4-关闭MMU和cache
- Java编程思想18.3 - 序列化技术
- Linux三种通配符
- px、pt、em与rem的区别(结尾不容错过哦)
- 求最长公共子序列
- 整数划分
- 最近不知道怎么了、老是因为莘县天气头疼。
- maven 不能加载ojdbc14.jar解决方法
- Elasticsearch java API (6) index API
- linux中mv和rename的区别
- Ubuntu 安装新版 MySQL
- DBMS_ROWID定位数据行物理存储位置
- C语言基础 三元运算符
- <性能测试进阶指南>性能测试招聘要求