Adventures in Moving - Part IV+uva+dp
来源:互联网 发布:java时间戳转换成天数 编辑:程序博客网 时间:2024/05/19 16:05
Description
Problem A: Adventures in Moving - Part IV
To help you move from Waterloo to the big city, you are considering renting a moving truck. Gas prices being so high these days, you want to know how much the gas for such a beast will set you back.The truck consumes a full litre of gas for each kilometre it travels. It has a 200 litre gas tank. When you rent the truck in Waterloo, the tank is half full. When you return it in the big city, the tank must be at least half full, or you'll get gouged even more for gas by the rental company. You would like to spend as little as possible on gas, but you don't want to run out along the way.
Input
The input begins with a single positive integer on a line by itself indicating the number of the cases following, each of them as described below. This line is followed by a blank line, and there is also a blank line between two consecutive inputs.Input is all integers. The first integer is the distance in kilometres from Waterloo to the big city, at most 10000. Next comes a set of up to 100 gas station specifications, describing all the gas stations along your route, in non-decreasing order by distance. Each specification consists of the distance in kilometres of the gas station from Waterloo, and the price of a litre of gas at the gas station, in tenths of a cent, at most 2000.
Output
For each test case, the output must follow the description below. The outputs of two consecutive cases will be separated by a blank line.Output is the minimum amount of money that you can spend on gas to get you from Waterloo to the big city. If it is not possible to get from Waterloo to the big city subject to the constraints above, print "Impossible".
Sample Input
1500100 999150 888200 777300 999400 1009450 1019500 1399
Output for Sample Input
450550
解决方案:dp[i][s]代表最低消费,由上一个站走到当前站的:dp[i][s-distance]=dp[i-1][s],i代表当前站,s代表上一站剩余的油量,到该站是否需要加油:dp[i][j]=min(dp[i][j],dp[i][j-1]+N[i].value);然后假象一个终点站dp[len][s].
code:
#include <iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace std;int dp[20000][300];struct node{ int position,value;} N[20000];int dis;int main(){ int t; scanf("%d",&t); while(t--) { scanf("%d",&dis); int len=1; char s[100]; getchar(); while(gets(s)) { if(s[0]==0) break; sscanf(s,"%d%d",&N[len].position,&N[len].value); len++; } N[len].position=dis; N[0].position=0,N[0].value=0; memset(dp,0x3f,sizeof(dp)); //for(int i=0;i<=100;i++) dp[0][100]=0; for(int i=1; i<=len; i++) { for(int s=N[i].position-N[i-1].position;s<=200;s++){ dp[i][s-(N[i].position-N[i-1].position)]=dp[i-1][s]; } if(i<len) for(int j=1;j<=200;j++){ dp[i][j]=min(dp[i][j],dp[i][j-1]+N[i].value); } } int Min=dp[len][100]; for(int i=101;i<=200;i++){ Min=min(Min,dp[len][i]); } if(Min==0x3f3f3f3f) printf("Impossible\n"); else printf("%d\n",Min); if(t) printf("\n"); } return 0;}
- Adventures in Moving - Part IV+uva+dp
- UVA 10201 Adventures in Moving - Part IV(dp)
- uva 10201 - Adventures in Moving - Part IV(dp)
- UVA 10201 Adventures in Moving - Part IV 车站加油 dp
- Adventures in Moving - Part IV - UVa 10201 dp
- uva 10201 Adventures in Moving - Part IV(dp)
- uva 10201 Adventures in Moving - Part IV (DP)
- uva 10201 Adventures in Moving - Part IV
- UVA 10201 Adventures in Moving - Part IV
- UVA 10201 Adventures in Moving - Part IV
- UVA 10201 Adventures in Moving - Part IV
- uva 10201 Adventures in Moving - Part IV
- UVA - 10201 Adventures in Moving - Part IV
- uva 10201 - Adventures in Moving - Part IV
- UVA - 10201 Adventures in Moving - Part IV
- UVA - 10201 Adventures in Moving - Part IV
- UVA - 10201 Adventures in Moving - Part IV
- uva 10201 Adventures in Moving - Part IV
- Cygwin vim部分颜色配置
- 云计算时代应用设计十二要素
- UnrealEngine3目录
- 桥接模式Bridge
- Hash算法
- Adventures in Moving - Part IV+uva+dp
- HTML5动画
- 学习计划
- 微软开放技术发布针对 Mac 和 Linux 的更新版 Azure Node.JS SDK 和命令行工具
- 老公给我讲算法(三)最小点对
- linux下tar命令解压到指定的目录
- 如何快速入门一个陌生知识领域
- C#设计模式之代理模式(Proxy Pattern)
- kali linux mount