1.  最大K乘积问题

« 问题描述

设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)

« 结果输出

计算出的最大k乘积。

输入文件示例

输出文件示例

input.txt

output.txt

3 2

312

62

2. 游艇租用问题:

问题描述

长江游艇俱乐部在长江上设置了n个游艇出租站1,2,…,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站i到游艇出租站j之间的租金为r(i,j),1£i<j£n。试设计一个算法,计算出从游艇出租站1到游艇出租站n所需的最少租金。

编程任务

对于给定的游艇出租站i到游艇出租站j之间的租金为r(i,j),1£i<j£n,编程计算从游艇出租站1到游艇出租站n所需的最少租金。

数据输入

由文件input.txt提供输入数据。文件的第1行中有1个正整数n(n<=200),表示有n个游艇出租站。接下来的n-1行是r(i,j),1<=i<j<=n。

(例如:

3

5 15

7

表示一共有3个出租站点,其中

第1个站点到第2个的租金为5

第1个站点到第3个的租金为15

第2个站点到第3个的租金为7

)

结果输出

程序运行结束时,将计算出的从游艇出租站1到游艇出租站n所需的最少租金输出到文件output.txt中。

输入文件示例

输出文件示例

input.txt

output.txt

3

5 15

12

7

input.txt

output.txt

4

15

3 7 19

5 13

8

实现源码:

import java.io.*;
public class Main{public static void main(String[] args){K();least();}public static void K(){/*num[n]存放数字m[i][j]表示前i个元素分为j段m[i][j] = Max(m[k][j-1]*num[k:i])*/ try{//数据初始化BufferedReader fr=new BufferedReader(new FileReader("file//input_2.txt"));String[] firstLine = fr.readLine().split(" ");int n = Integer.parseInt(firstLine[0]);int k = Integer.parseInt(firstLine[1]);String[] secondLine=fr.readLine().split("");int[] num = new int[n+1];for(int i=1;i<=n;i++){num[i] = Integer.parseInt(secondLine[i-1]);}//结果数组m初始化int[][] m = new int[n+1][n+1];m[1][1] = num[1];for(int i=2;i<=n;i++){//初始情况,分为1段时m[i][1] = m[i-1][1]*10 + num[i];}//进行分段for(int part=2; part<=n; part++){//分为part段,最多即n段for(int len=part; len<=n; len++){//更新m[len][part]int max = 0;for(int median=1; median<len; median++){//寻找中间值median,寻找m[len][part]的最大值int value = m[median][part-1]*sum(num,median+1,len);max= max>value ? max : value;}m[len][part] = max;}}fr.close();//将结果写入文件FileWriter fw = new FileWriter(new File("file//output_2.txt"));fw.write(String.valueOf(m[n][k]));fw.close();}catch(Exception e){System.out.println(e);}}public static int sum(int[]num,int i,int j){//求数组num第i位到第j位的和int result=0;for(int k=i;k<=j;k++){result += num[k];}return result;}public static void least(){try{BufferedReader fr = new BufferedReader(new FileReader("file/input.txt"));int len = Integer.parseInt(fr.readLine());//出租点编号为0到len-1号//到各点的最小开销int[] cost = new int[len];for(int i=0;i<len;i++){cost[i] = i==0 ? 0 : 0Xffff;}//为距离数组赋值int[][] num = new int[len][len];for(int i=0;i<len-1;i++){String[] str = fr.readLine().split(" ");for(int j=0;j<str.length;j++){num[i][i+1+j] = Integer.parseInt(str[j]);}}//len-1次循环,逐步向后更新到每个点的最小开销for(int i=0;i<len-1;i++){//根据第i个点到后面点的距离,更新最短距离for(int j=i+1;j<len;j++){if( cost[j] > cost[i]+num[i][j] ){cost[j] = cost[i]+num[i][j];}}}fr.close();FileWriter fw = new FileWriter(new File("file//output.txt"));fw.write(String.valueOf(cost[len-1]));fw.close();}catch(Exception e){System.out.println(e);}}}

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

  1. 算法设计与分析:动态规划(3)-序列联配问题(以算代存)

    文章目录 前言 高级动态规划 应用分治思想减少空间 计算得分 从后缀匹配到前缀匹配 伪代码 分治点计算改进 总结 本文参考UCAS卜东波老师算法设计与分析课程撰写 前言 本文内容承接上一次算法设计与分 ...

  2. 算法设计与分析——动态规划(二):钢条切割

    分类目录:<算法设计与分析>总目录 相关文章: · 动态规划(一):基础知识 · 动态规划(二):钢条切割 · 动态规划(三):矩阵链乘法 · 动态规划(四):动态规划详解 · 动态规划( ...

  3. 算法设计与分析-----动态规划

    算法设计与分析-----动态规划(c语言) 一.动态规划 1.定义 2.动态规划问题的解法 3.动态规划求解的基本步骤 4.动态规划与其他方法的比较 5.求解整数拆分问题 6.求解最大连续子序列和问题 ...

  4. 算法设计与分析——动态规划(五):最长公共子序列

    分类目录:<算法设计与分析>总目录 相关文章: · 动态规划(一):基础知识 · 动态规划(二):钢条切割 · 动态规划(三):矩阵链乘法 · 动态规划(四):动态规划详解 · 动态规划( ...

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

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

  6. 算法设计与分析——动态规划(一)矩阵连乘

    动态规划--Dynamic programming,可以说是本人一直没有啃下的骨头,这次我就得好好来学学Dynamic programming. OK,出发! 动态规划通常是分治算法的一种特殊情况,它 ...

  7. 程振波 算法设计与分析_算法分析与设计之动态规划

    动态规划同样是一种将问题分解为求解子问题的方法,不过与分治不同的是,动态规划算法的子问题不是相互独立的,而是有公共的部分,即有重叠子问题,这个时候使用分治算法,将会重复计算公共的子问题,效率很低!而用 ...

  8. 算法设计与分析 实验四 动态规划求解流水线问题

    动态规划求解流水线问题 一.实验目的与要求 1. 实验目的: 2. 实验亮点: 二.实验内容与方法 1. 实验内容: 2. 实验要求: 三.实验步骤与过程 (一)暴力穷举法 1.算法描述: 2.时间复 ...

  9. 计算机算法设计与分析 租用游艇问题

    长江俱乐部在长江设置了n个游艇出租站1,2,-n,游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇.游艇出租站i到游艇出租站j之间的租金为r(i,j), 设计一个算法,计算出从出租 ...

最新文章

  1. Python3中raise用法
  2. python 在windows 中文显示
  3. python处理excel视频-从零基础开始用Python处理Excel数据 视频教程
  4. beego 文件服务器,beego自动化文档
  5. [转]对C#泛型中的new()约束的一点思考
  6. 三极管稳压管组成的线性电源关键理解
  7. 云智视像 | 内推两个年薪可达70万+的CV算法职位~base杭州上海
  8. 华为三星和解;联想全球首发折叠电脑;苹果回应美高院裁决 | 极客头条
  9. php mysql中华图书购物商城
  10. Android中JNI 的一些常用说明 JNI_OnLoad registerNatives registerNativeMethods
  11. 使用timerfd实现定时器功能
  12. 【Pix4d精品教程】Pix4d模型成果导出OSGB并加载OSGB到EPS进行三维测图完美案例教程
  13. vs2010注册码 激活方法
  14. 论文常用图表三:盒图 Boxplot【MATLAB】
  15. 怎样打印计算机桌面,敬业签电脑桌面便签软件怎么打印便签内容?
  16. 研究Google maps及51ditu的图片切割及存储方法(转)
  17. 计算机专业必读哪些经典书籍?
  18. 折腾黑苹果 - 制作四叶草CLOVER引导U盘
  19. 2022-2027年中国心血管病医院行业市场深度分析及投资战略规划报告
  20. win7计算机搜索功能没有了,win7搜索功能不能用了怎么办|win7搜索功能不见了怎么解决? - 学无忧...

热门文章

  1. 麻辣烫与安卓主线程工作原理
  2. 史上最全Fragment介绍,包括fragment的定义,生命周期,用法
  3. html中插入图片img的相对路径
  4. 大学计算机相关专业实验实训整理
  5. vue安装初始化项目
  6. 如何使用ssh-keygen生成新的SSH key
  7. mysql实验3_MySQL实验(三) 过程式数据库对象的使用
  8. flex弹性盒子做骰子详解
  9. PAT 1081 检查密码
  10. 在日常学习生活中,究竟该如何保持稳定的情绪呢?