当前位置: 首页 > news >正文

wordpress 文章 收藏优化大师班级优化大师

wordpress 文章 收藏,优化大师班级优化大师,北京装修平台网站,建设房地产网站问题描述 长江游艇俱乐部在长江上设置了n个游艇出租站1&#xff0c;2&#xff0c;…&#xff0c;n。游客可在这些游艇出租站租用游艇&#xff0c;并在下游的任何一个游艇出租站归还游艇。游艇出租站i到游艇出租站j之间的租金为r(i,j),1<i<j<n。试设计一个算法&#x…

问题描述

长江游艇俱乐部在长江上设置了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. 阶段(区间长度)

设区间长度为d,

  • 当区间是1 =》 2的时候,此时区间长度为2;

  • 当区间是1 =》 3的时候,此时区间长度为3。

很显然,如果区间长度小于3,那就可以直接取值,不需要状态转移

所以我们只需要考虑区间长度 > 3 的情况

即 d = 3,4,…n (当 d = 2 的时候,也就是1-2,2-3,不需要求解,直接读取数组的值即可)

2. 状态

举例:当 区间长度d = 3 ,站点数n = 6 的时候

起点i的取值:1-3,2-4,3-5,4-6,不能再取5了,因为最大值n = 6,而5-6不能取到d=3,因
此i的取值为 1 ~ n - d + 1。

终点j的取值:i ~ n - i + 1

而中间可能停靠的站点k 就在i和j之间取值

3. 决策

状态转移方程:

用dp [ i ] [ j ]表示从i到j的最少费用

dp [ i ] [ j ] = min{dp [ i ] [ j ] , dp [ i ] [ k ] + dp [ k ] [ i ]}


扩展

如果需要记录最短费用的路径上,是停靠了哪些站点呢?

那就再开一个二维数组 s[ i ] [ j ],当发生状态转移的时候,就记录下当前的k值。

然后通过递归,依次找到其他不为0的k值。

public static void minPath(int i , int j , int [][]path, int []pathPoint,int pathIndex) {if(path[i][j] == 0){} // 什么都不做else {pathPoint[pathIndex++] = path[i][j]; // 加入到数组minPath(i,path[i][j],path,pathPoint,pathIndex); // 左边区间minPath(path[i][j],j,path,pathPoint,pathIndex); // 右边区间}}

完整代码:

package algorithm;import java.io.*;
import java.util.Arrays;
import java.util.Scanner;public class experiment_03 {public static void main(String[] args) {String srcPath = "Input.txt";String targetPath = "Output.txt";int cnt = 0;int []arr = new int[100];int [][]dp = new int[100][100]; // dp数组 表示从i到j最少的费用int [][]path = new int[100][100]; // 记录中间停靠站点k值的二维数组int []pathPoint = new int[100]; int pathIndex = 0; // 记录停靠的站点try {Scanner scanner = new Scanner(new FileReader("Input.txt"));while(scanner.hasNextInt()) {arr[cnt++] = scanner.nextInt();}} catch (FileNotFoundException e) {e.printStackTrace();}int n = arr[0]; // 站点总数cnt = 0;for(int i = 1 ; i <= n ; i++) { // dp数组初始化 上三角二维数组for(int j = i + 1; j <= n ; j++) {dp[i][j] = arr[++cnt];}}System.out.println("最少的花费为:" + minFare(n,dp,path));minPath(1,n,path,pathPoint,pathIndex);System.out.printf("经过的站点为:1 ");printPath(pathPoint);System.out.print(n);}public static int minFare(int n ,int [][]dp , int [][]path) {for(int d = 3; d <= n ; d++) { // 1. 区间长度for (int i = 1 ; i <= n - d + 1; i++) { // 2. 起点的取值范围int j = i + d - 1; // 3. 起点对应的终点的值for(int k = i + 1 ; k < j ; k++) { // 4. 可能停靠的站点
//                  dp[i][j] = Math.min(dp[i][j],dp[i][k] + dp[k][j]);if(dp[i][k] + dp[k][j] < dp[i][j]) {dp[i][j] = dp[i][k] + dp[k][j];path[i][j] = k;}}}}return dp[1][n];}// 递归求出可能停靠的站点public static void minPath(int i , int j , int [][]path, int []pathPoint,int pathIndex) {if(path[i][j] == 0){}else {pathPoint[pathIndex++] = path[i][j];minPath(i,path[i][j],path,pathPoint,pathIndex);minPath(path[i][j],j,path,pathPoint,pathIndex);}}// 打印出最少花费的路径public static void printPath(int []pathPoint) {int cnt = 0;while(pathPoint[cnt++] != 0);int []arr = new int[cnt-1];for(int i = 0 ; i < cnt-1 ; i++) arr[i] = pathPoint[i];Arrays.sort(arr);for(int i = 0 ; i < cnt-1 ; i++) System.out.printf(arr[i] + " ");}}

注意:把文件中的内容按照int数字读出来的方法

Scanner scanner = new Scanner(new FileReader("Input.txt"));while(scanner.hasNextInt()) {arr[cnt++] = scanner.nextInt();}

在找到此文件读取方法之前,笔者一直在用一整行读取或者是按照1个字节读取,在这个地方耽误了很久时间。

实际上无论是一整行还是1个字节,对于上三角存放文件中的数组都不方便!

http://www.lbrq.cn/news/2700793.html

相关文章:

  • 服务器做网站好指数运算法则
  • 江苏优化网站关键词热度查询工具
  • wordpress简易主题5g网络优化
  • 零基础做地方门户网站网络营销的工具和方法有哪些
  • 定海区住房和城乡建设局网站公关公司一般收费标准
  • wordpress怎样发询盘推广seo是什么意思
  • 福建省城市建设厅网站2022年五月份热点事件
  • 建设网站源码百度手机助手下载安卓版
  • 大学两学一做专题网站关键词优化排名怎么做
  • 建设机械网站咨询市场营销活动策划方案
  • 鄂州做网站多少钱成都谷歌seo
  • ps 怎么做网站百度一下你就知道官方网站
  • 建网站可以铺货seo教程seo入门讲解
  • 做国际网站找阿里seo免费培训
  • 宁波网站建设费用是多少钱天津seo网络
  • 深圳公司注册中介处理器优化软件
  • 快速的网站开发互动营销的案例有哪些
  • 把手机做网站服务器山东免费网络推广工具
  • 个人怎么做淘宝客网站近一周热点新闻
  • 开发网站哪家好百度图片搜索图片识别
  • 营销网站的成功案例百度推广官网网站
  • 淘客怎么做网站单页惠州seo关键词排名
  • 怎么用网站做word文件格式软文新闻发稿平台
  • 中国建行网站百度网站推广排名
  • 东莞的网站建设网络营销促销方案
  • 中文域名网站 被搜索东莞网络公司电话
  • 互动网站建设怎么制作网站平台
  • php做网站怎么布局怎么在线上推广自己的产品
  • 怀化二手车网站网站怎么收录到百度
  • 德州哪里有做网站的网络营销方案的范文
  • 旧版MinIO的安装(windows)、Spring Boot 后端集成 MinIO 实现文件存储(超详细,带图文)
  • IPA1299至为芯替代TI ADS1299的脑机接口芯片
  • kernel pwn 入门(四) ret2dir详细
  • 小红书笔记信息获取_实在智能RPA源码解读
  • 将黑客拒之物联网网络之外的竞赛
  • 最终章【1】Epson机器人篇