问题描述
设I是一个n位十进制整数。如果将I划分为k段,则可得到k个整数。这k个整数的乘积称为I的一个k乘积。试设计一个算法,对于给定的I和k,求出I的最大k乘积。
例如
十进制整数 1234 划分为 3 段可有如下情形:
1 × 2 × 34 = 68
1 × 23 × 4 = 92
12 × 3 × 4 = 144
编程任务
对于给定的I 和k,编程计算I的最大k乘积。
数据输入
输入的第1 行中有2个正整数n和k。正整数n是序列的长度;正整数k是分割的段数。接下来的一行中是一个n位十进制整数。(n<=10)
实现提示
参考矩阵链乘问题 (参考了网上代码…
这次的动态规划函数是乘法的形式,值得学习,没有想出来。

#include <stdio.h>
#include <stdlib.h>
int m[101][101];//前i个数字 分成j段
int a[101];//存放数字
int cal(int a[],int i,int j)
{int value=0;while(j>=i){value=value*10+a[i];i++;}return value;
}
int main()
{FILE *In,*Ou;int n,k,i,j;int num;int max,value;if((In=fopen("D:\\input.txt","r"))!=NULL){fscanf(In,"%d %d",&n,&k);fscanf(In,"%d",&num);int i=n;while(num){a[i]=num%10;i--;num/=10;}fclose(In);}else{printf("输入文件打开失败!\n");}if(k>=n){printf("划分位数大于等于数字位数 输入不合法\n");return 0;}/*m[i][j]表示前i个数分成j段的最大乘积满足最优性原理 重叠子问题*/m[1][1]=a[1];for(i=2;i<=n;i++)m[i][1]=m[i-1][1]*10+a[i];for(i=2;i<=k;i++){//分成多少段 统计到k段即可max=-1;for(j=i;j<=n;j++){//统计前j个元素分成i段的最大乘积int d;for(d=1;d<=j-1;d++){value=m[d][i-1]*cal(a,d+1,j);//把前d个数分成i-1段再乘上从d+1~jif(value>max)max=value;}m[j][i]=max;}}if((Ou=fopen("D:\\output.txt","w"))!=NULL){fprintf(Ou,"%d",max);fclose(Ou);}else{printf("输出文件打开失败\n");}return 0;
}

参考链接

最大k乘积问题---动态规划实验1相关推荐

  1. 最大k乘积问题--动态规划

    问题 问题描述: 设x是一个n位十进制整数.如果将x划分为k段,则可得到k个整数.这k个整数的乘积称为x的一个k乘积.试设计一个算法,对于给定的x和k,求出x的最大k乘积. 编程任务: 对于给定的x和 ...

  2. 最大k乘积问题----动态规划

    问题 设I是一个n位十进制整数.如果将I划分为k段,则可得到k个整数.这k个整数的乘积称为I的一个k乘积.试设计一个算法,对于给定的I和k,求出I的最大k乘积. 编程任务: 对于给定的I 和k,编程计 ...

  3. 【动态规划】最大K乘积问题和游艇租用问题——武汉理工大学算法设计与分析课程实验

    1.  最大K乘积问题 « 问题描述 设I是一个n位十进制整数.如果将I划分为k段,则可得到k个整数.这k个整数的乘积称为I的一个k乘积.试设计一个算法,对于给定的I和k,求出I的最大k乘积. 例如十 ...

  4. 动态规划|最大k乘积问题(C语言)

    题目: [分析] 先通过若干个简单例子来观察规律,摸索思路.例如十进制整数 1234 划分为 3 段可有如下情形: 1 × 2 × 34 = 68 1 × 23 × 4 = 92 12 × 3 × 4 ...

  5. python动态规划算法最大k乘积_C语言使用DP动态规划思想解最大K乘积与乘积最大问题...

    最大K乘积问题设I是一个n位十进制整数.如果将I划分为k段,则可得到k个整数.这k个整数的乘积称为I的一个k乘积.试设计一个算法,对于给定的I和k,求出I的最大k乘积. 编程任务: 对于给定的I 和k ...

  6. 动态规划之最大K乘积问题

    题目要求 设I是一个n位十进制整数.如果将I划分为k段,则可得到k个整数.这k个整数的乘积称为I的一个k乘积.试设计一个算法,对于给定的I和k,求出I的最大k乘积. 例如十进制整数 1234 划分为 ...

  7. 【动态规划】最大k乘积问题

    Description         设I是一个 n位十进制整数.如果将I划分为 k段,则可得到k个整数.这k个整数的 乘积称为I的一个 k乘积.试设计一个算法,对于给定的 I和 k,求出 I的最大 ...

  8. python动态规划算法最大k乘积_划分类动态规划——乘积最大(洛谷1018,codevs1017)...

    本题由于比较老,数据实际也比较小,用long long 即可通过 代码: var n,m,i,j,k,sum:longint; s,t:string; a:array[1..40,1..40] of ...

  9. 租用游艇问题 石子合并问题 动态规划实验

    实验名称:动态规划 一.实验预习 1.实验目的 1. 理解并掌握动态规划方法的设计思想: 2. 提高应用动态规划方法解决问题和设计算法的能力: 3. 通过编程实现租用游艇问题和石子合并问题,进一步理解 ...

最新文章

  1. 2019年我只想明白了这5点
  2. django2 mysql配置_Django:Python3.6.2+Django2.0配置MySQL 转载
  3. 生产交接班管理系统的安装设置并下载
  4. uc扩展中心打不开_如何享用chorme扩展
  5. Spark SQL:SQLContext
  6. spoj1026 favorite dice
  7. WEB攻防实战篇,思维导图
  8. 面试官:final、finally、finalize 有什么区别?
  9. 排序算法:冒泡排序算法优化实现及分析
  10. SpringCloud 使用Docker搭建Consul节点集群
  11. python storm连接mysql_python ORM storm中的复合外键引用
  12. 贝叶斯概率推断:概率分布
  13. vue项目 报sockjs.js?9be2:1606 GET http://192.168.43.226:8080/sockjs-node/info?t=1584966826465 net::ERR
  14. 综合布线系统计算机网络,综合布线 计算机网络系统
  15. ElasticJob分布式调度,分布式多个微服务执行只需要执行一个定时任务,基本概念介绍(一)
  16. Kali Linux信息收集工具全集
  17. 一个app的流程分析
  18. Java中的Collection集合以及Collection集合实现类实例
  19. 使用pm命令安装或卸载apk,静默安装、卸载方法
  20. java魔箭天使apk_java魔箭天使apk下载|java游戏魔箭天使安装包下载v1.0....

热门文章

  1. P1339 [USACO09OCT]热浪Heat Wave(最短路水题)
  2. 蓝豹子2.8程序设计题
  3. POJ 2092 Grandpa is Famous G++
  4. 基于超声波传感器的液位测量及控制系统设计(STM32)
  5. 游戏运营岗位的相关知识点
  6. [转帖]详细讲解六大QQ病毒的特征以及清除方法
  7. 鸿蒙系统拟物化图标,那些让人不得不吐槽的软件设计风格
  8. XML技术在电子病历中的应用
  9. 关于 Web 可访问性的神话
  10. 阿里、百度、腾讯Java程序员面经(附带面试题答案)