算法 最大k乘积问题
来源:互联网 发布:手机照相优化算法 编辑:程序博客网 时间:2024/05/17 22:03
题目
设I是一个n位十进制整数。如果将I分割为k段,则可得到k个整数。这k个整数的乘积称为I的一个k乘积。
试设计一个算法,对于给定的I和k,求出I的最大k乘积。
分析
设w[i][j]表示从第i位到第j位的数字表示的整数,m[i][j]表示前i位分成j段所得到的最大乘积,则:
m[i][1]=w[1][i]
m[i][j]=max{ m[d][j-1] * w[d+1][i] } 其中1<=d<=i
#include <stdio.h>#include <stdlib.h>#define MAX 10int m[MAX][MAX];int w[MAX][MAX];void suanfa(int *a,int n,int k){ int i,j,d,max,temp; for(i=1; i<=n; i++){ m[i][1] = w[1][i];//前i位分成1段,就是从1到i位的整数。 } for(i=1; i<=n; i++){ for(j=2; j<=k; j++){ max = 0; for(d=1; d<i; d++){//从1~i取最大的给max temp=m[d][j-1]*w[d+1][i]; if(temp>max){ max=temp; } m[i][j]=max; } } }}void init(int *a,int n){ int i,j; for(i=1; i<=n; i++){//从1开始 w[i][i]=a[i]; //第i位表示的整数 for(j=i+1; j<=n; j++){ w[i][j] = w[i][j-1]*10+a[j];//第i~j位表示的整数 = 第i~j-1位表示的整数x10 + 第j位整数 } }}int main(){ int n=3;//这个数是n位的 int k=2;//把这个数分成分成k段 int a[MAX]={0,1,3,4};//这个数134,结果:52 init(a,n); suanfa(a,n,k); printf("%d\n",m[n][k]);//打印n位分成k段的最大k乘积 return 0;}
0 0
- 算法 最大k乘积问题
- 最大K乘积问题:
- 最大k乘积问题
- 最大K乘积问题
- 最大K乘积问题
- 最大K乘积问题
- 最大k乘积问题
- 最大k乘积问题
- 最大k乘积问题
- 最大k乘积问题
- 【dp】最大k乘积问题
- FZU_1208_最大k乘积问题
- FZU_1208_最大k乘积问题
- 最大k乘积问题(dp)
- 最大K乘积问题(DP专题)
- 最大K乘积问题(DP专题)
- FOJ 1208 最大k乘积问题
- foj 1208 最大k乘积问题
- 勤奋是一把钥匙,会打开一切的希望之门。
- Flume 1.7.0 用户指南(上篇)
- 推荐一本学Python的好书《Python程序设计(第2版)》
- 关于activity不执行oncreate方法的问题
- 第十章 10.2 提高聚类性能 10.3 二分K-均值算法
- 算法 最大k乘积问题
- Eclipse 英文翻译一点点
- eclipse环境变量配置及及其他相关错误总结
- BZOJ1576——[Usaco2009 Jan]安全路经Travel
- 编程的核心
- Android实现ListView圆角效果
- 1/7 分糖
- Unity3D编辑器扩展(三)之对选中对象的操作(Selection类)
- 使用opencv的imshow函数时遇到segmentation fault问题