题目背景

张骞于公元前138年曾历尽艰险出使过西域。加强了汉朝与西域各国的友好往来。从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他们越过崇山峻岭,将中国的先进技术带向中亚、西亚和欧洲,将那里的香料、良马传进了我国。每当人们凝望荒凉的大漠孤烟,无不引起对往日商贸、文化繁荣的遐想……

题目描述

小仓鼠带着货物,从中国送到安息,丝绸之路包括起点和终点一共有N+1个城市,0号城市是起点长安,N号城市是终点巴格达。要求不超过M天内必须到达终点。一天的时间可以从一个城市到连续的下一个城市。从i-1城市到i城市距离是Di。

大家都知道,连续赶路是很辛苦的,所以小仓鼠可以在一个城市时,可以有以下选择:

  • 移动:向下一个城市进发

  • 休息:呆在原来的城市不动

沙漠天气变化无常,在天气很不好时,前进会遇到很多困难。我们把M天的第j(1<=j<=M)天的气候恶劣值记为Cj。从i-1城市移动到i城市在第j天进发时,需要耗费Di*Cj的疲劳度。

不过小仓鼠还是有选择权的,可以避开比较恶劣的天气,休息是不会消耗疲劳值的。现在他想知道整个行程最少要消耗多少疲劳值。

输入输出格式

输入格式:

第一行2个整数N,M

连续N行每行一个整数Dj

连续M行每行一个整数Cj

输出格式:

一个整数,表示最小疲劳度

输入输出样例

输入样例#1: 复制

3 5
10
25
15
50
30
15
40
30
输出样例#1: 复制

1125

题意:就是从原点到终点的n+1个城市穿越任务要在m天内完成,必须按给出的城市顺序来完成整个路程,两个城市之间有间距,在这m天中每天会有一个恶劣值,城市之间的距离乘与这一天的恶劣值是这个疲劳度,求出来穿越所有城市后这个疲劳度的最小值

解法:

相比于P1280 尼克的任务,它们之间的区别就是,合唱队形那一个时刻要做什么事情已经是固定的了,这样你就可以直接以一维dp来写出答案

而这一道题,他只给我们说我们要在m天内走过这么多个城市,而没有固定什么时候走,这就要多加一个维度来判断那一天走这个城市比较合适

那么我们在dp某个位置的值肯定要由他的上一个维度,和它这个维度的前面的值来得到(我习惯这样考虑)

而且我每一个维度的值肯定是非严格递减(因为我们要求最小疲劳度)

我们肯定是要走n+1个城市,但是我们开始就在原点城市,所以只需要枚举n个就行

这n个城市在一定要以递增的形式枚举

简单说:

这个二维的列坐标是代表应该走过前几个城市,那个二维的行坐标就是表示在这个天数(这个天数是一维枚举的)要走列坐标数目的城市

例如:

用i表示列,j表示行

dp[i][j]表示在前j天内走过i个城市所需要的最小疲劳度

这样写的话,一个dp[i][j]值得确定,要由它的

1、(dp[i-1][j-1](因为它的每一个一维上面是递减的,所以越靠后疲劳度越小)+(j天去城市)*(之前城市与现在这个城市之间的距离))

2、dp[i][j-1](也就是上一个值)

决定,只需要取他们的最小值就行

当枚举到他的天数小于它要经过的城市数的时候就不用管它,刚好够的时候就一个一个对应相乘再相加

这样当他的 j(天数)大于 i(要经过城市数) 的时候,我们就要去试探不让第j-1天去经过第i个城市,转而让第j天去经过它,会不会疲劳度更小,在让它之前的城市去上一维找最小疲劳值

上代码吧:

 1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 using namespace std;
6 const int maxn=1005;
7 int D[maxn],C[maxn],dp[maxn][maxn];
8 int main()
9 {
10 int n,m;
11 scanf("%d%d",&n,&m);
12 for(int i=1;i<=n;++i)
13 scanf("%d",&D[i]);
14 for(int j=1;j<=m;++j)
15 scanf("%d",&C[j]);
16 for(int i=1;i<=n;++i)
17 {
18 for(int j=i;j<=m;++j)
19 {
20 if(j!=i)
21 dp[i][j]=min(dp[i][j-1],dp[i-1][j-1]+C[j]*D[i]);
22 else dp[i][j]=dp[i-1][j-1]+C[j]*D[i];
23 }
24 }
25 printf("%d\n",dp[n][m]);
26 }

最新文章

  1. Android笔记——在布局文件中插入另一个布局文件
  2. 返回值优化(RVO)
  3. 使用Maven来写j2ee项目
  4. Shuffle&#39;m Up 分类: 函数 POJ 查找 2015-08-09 17:01 6人阅读 评论(0) 收藏
  5. poj 1811 Prim test
  6. VC++ 响应回车键的2种方法
  7. 表单同时有中文字段和文件上传,加上enctype=&quot;multipart/form-data&quot;后导致的中文乱码问题
  8. UESTC_Eight Puzzle 2015 UESTC Training for Search Algorithm &amp; String&lt;Problem F&gt;
  9. grunt--自动化任务快速上手
  10. gulp 运用 的理解
  11. 【前端】向blog或网站中添加语法高亮显示代码方法总结
  12. Codeforces Round #408 (Div. 2)
  13. 根据需要查找需要的第三方pyhton库
  14. (转)Java大数操作(BigInteger、BigDecimal)
  15. linux常用命令:cp 命令
  16. 算法笔记--sg函数详解及其模板
  17. Nexus介绍
  18. BZOJ1086 SCOI2005王室联邦
  19. dtrace for mysql
  20. Java中的多态方法

热门文章

  1. Flutter 应用入门:路由管理
  2. 机器学习笔记&#183;adaboost
  3. P1140 相似基因(字符串距离,递推)
  4. 集成多种协议、用于 USBC 端口的快充协议芯片IP2723
  5. widnows2008双网卡双ip不同Ip段
  6. WPF Selector、SelectIndex、SelectedValue、SelectedValuePath、SelectedItem这几兄弟你分的清楚嘛?
  7. 小麦苗数据库巡检脚本,支持Oracle、MySQL、SQL Server和PG等数据库
  8. JVM笔记 -- Java跨平台和JVM跨语言
  9. 【Soul网关探秘】http数据同步-Web端处理变更通知
  10. Java 学习之路 -- day00