UVA 10201 Adventures in Moving - Part IV(dp)
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
1 500
100 999
150 888
200 777
300 999
400 1009
450 1019
500 1399
Output for Sample Input
450550
题意:给定终点距离。和起点到终点之间的加油站位置和每个加油站每升油的价钱,求最少需要花的钱使得到终点后油剩100升。
思路:dp。i作为站点,j作为有多少升油。dp[i][j]表示在第i个站点有j升油所需要花的最少钱,k为在前一个站点加k升油。
状态转移方程dp[i][j] = min(dp[i][j], dp[i - 1][j + dis - k] + k * city[i].n)。
代码:
#include <stdio.h>
#include <string.h>
#include <limits.h>
#include <math.h>
#include <algorithm>
using namespace std; int t, n, dp[105][205], num, i, j, k;
char sb[105];
struct City {
int d, n;
} city[105]; int min(int a, int b) {
return a < b ? a : b;
} int cmp(City a, City b) {
return a.d < b.d;
}
int main() {
scanf("%d", &t);
while (t --) {
num = 1;
scanf("%d%*c", &n);
while (gets(sb) != NULL && sb[0] != '\0') {
sscanf(sb, "%d%d", &city[num].d, &city[num].n);
num ++;
}
sort(city + 1, city + num, cmp);
for (i = 0; i <= num; i ++)
for (j = 0; j <= 200; j ++)
dp[i][j] = INT_MAX;
dp[0][100] = 0;
for (i = 1; i < num; i ++) {
int dis = city[i].d - city[i - 1].d;
for (j = 0; j <= 200; j ++) {
for (k = 0; k <= j; k ++) {
if (j + dis - k <= 200 && dp[i - 1][j + dis - k] != INT_MAX) {
dp[i][j] = min(dp[i][j], dp[i - 1][j + dis - k] + k * city[i].n);
}
}
}
}
if (dp[num - 1][100 + abs(n - city[num - 1].d)] != INT_MAX && 100 + abs(n - city[num - 1].d) <= 200) {
printf("%d\n", dp[num - 1][100 + abs(n - city[num - 1].d)]);
}
else
printf("Impossible\n");
if (t) printf("\n");
}
return 0;
}
UVA 10201 Adventures in Moving - Part IV(dp)的更多相关文章
- UVa 10201 Adventures in Moving - Part IV
https://vjudge.net/problem/UVA-10201 题意: 给出到达终点的距离和每个加油站的距离和油费,初始油箱里有100升油,计算到达终点时油箱内剩100升油所需的最少花费. ...
- UVA 10201 DP
Adventures in Moving - Part IV 题意: 汽车邮箱容量200升,最初有100升油,要求到达终点油箱中的油不少于100升的最小花费,不能到达终点输出Impossible. 汽 ...
- UVA.357 Let Me Count The Ways (DP 完全背包)
UVA.357 Let Me Count The Ways (DP 完全背包) 题意分析 与UVA.UVA.674 Coin Change是一模一样的题.需要注意的是,此题的数据量较大,dp数组需要使 ...
- 训练指南 UVA - 10917(最短路Dijkstra + 基础DP)
layout: post title: 训练指南 UVA - 10917(最短路Dijkstra + 基础DP) author: "luowentaoaa" catalog: tr ...
- UVA - 1025 A Spy in the Metro[DP DAG]
UVA - 1025 A Spy in the Metro Secret agent Maria was sent to Algorithms City to carry out an especia ...
- UVa 1252 - Twenty Questions(状压DP)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 10891 Game of Sum(区间DP(记忆化搜索))
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- UVa 1220 - Party at Hali-Bula(树形DP)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 10529 - Dumb Bones(概率+区间dp)
UVA 10529 - Dumb Bones option=com_onlinejudge&Itemid=8&category=518&page=show_problem&am ...
随机推荐
- stm32之595(spi芯片)
595是一款串转并的芯片: (三极管的功能) /*Include---------------------------*/ #include"stm32f10x_lib.h" / ...
- MVC 返回 view
RedirectToAction(),即直接返回相同Controller的Index方法: 这个方法还有其他重载方法,比如第二个参数是Controller名,可以指定其他Controller下的Vie ...
- eclipse+python+Anaconda ML环境搭建
整个流程按照这个来: http://blog.csdn.net/olaking/article/details/42435451 你会发现pydev安装不了,听说服务器被和谐了,下面这篇文章告诉你如何 ...
- java String 怎么看里面有几个指定字符
我现在有一个String 字符串,我想看一下这个字符串里有几个指定的字符,比如指定字符是div求解 public class Main { public static void main(String ...
- BZOJ 2631: tree( LCT )
LCT...略麻烦... -------------------------------------------------------------------------------- #inclu ...
- USACO Prime Palindromes 构造回文数
这道题目一点也不卡素数的判断 就是朴素的sqrt(n) 也不卡 所以~放心的用吧. 构造回文的时候看了HINT 其中是这么写的: Generate palindromes by combining d ...
- Qt 文件监视器 QFileSystemWatcher
之前有过对Qt的QFile以Text纯文本方式进行读取时的学习,这两天由于实时需要又对QFileSystemWatcher(这个类是干什么用的)进行了学习,发现也是问题很让人头疼. 我想监视一个文件夹 ...
- IntelliJ idea 14 集成 tomcat 7
来到公司第一个任务就是先把web项目跑起来,所以如何在IntelliJ idea14中把Tomcat集成起来也是个不小的问题. 首先确认你的idea 14 不是 Communit Edition 社区 ...
- [Android] FileInputStream跟踪
1. 源起 需要跟踪FileInputStream的Read的Nativie实现,开始走了弯路,Java工程下的FileInputStream实现与Android工程的实现不同.另外,http://b ...
- 在 vb中 "end","unload me","exit sub" 之间的区别
之前就想过这个问题,这么熟悉的几个东西居然对他们分析的不是很透彻. “End” 跟 “Unload Me” 在敲程序 的时候经常敲到,“exit sub” 更是熟悉,下面,解析: End ...