https://vjudge.net/problem/UVA-10201

题意:

给出到达终点的距离和每个加油站的距离和油费,初始油箱里有100升油,计算到达终点时油箱内剩100升油所需的最少花费。

思路:

我们用d[i][j]来表示车子在第 i 个加油站时还剩 j 升油量的最小花费

先说一下转移方程吧,d[i][j] = min(d[i][j], d[i - 1][j + l - k] + k*b[i]),k代表的是在 i 这个加油站所加的油量,加了之后的总油量就是 j 。

需要注意的是,油箱的容量只有200升,所以j+l-k(第 i-1 个加油站的油量)必须小于等于200

最后的判断,如果目的地距离最后那个加油站大于了100,那最终肯定是没办法剩100升的,这时可以直接“Impossible”。

本题的输入也是很麻烦,每次都需要整行读入才行。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std; const int INF = ; char s[];
int length;
int num;
int a[], b[];
int d[][]; //d[i][j]表示在第i站还剩j汽油时的最少费用 int main()
{
int T;
gets(s);
sscanf(s, "%d", &T);
gets(s); //吃掉空行
while (T--)
{
gets(s);
sscanf(s, "%d", &length);
num = ;
a[] = ;
while (gets(s))
{
if (s[] == '\0') break;
num++;
sscanf(s, "%d %d", &a[num], &b[num]);
//cout << a[num] << " " << b[num] << endl;
if (a[num] > length) num--; //距离大于目的地的站不用考虑
} for (int i = ; i <= num; i++)
for (int j = ; j <= ; j++)
d[i][j] = INF;
d[][] = ; for (int i = ; i <= num; i++)
{
int l = a[i] - a[i - ];
for (int j = ; j <= ; j++)
{
for (int k = ; k <= j; k++)
if (j + l - k <= )
d[i][j] = min(d[i][j], d[i - ][j + l - k] + k*b[i]);
}
}
if (length - a[num]> || d[num][ + length - a[num]] == INF)
printf("Impossible\n");
else
printf("%d\n", d[num][ + length - a[num]]);
if (T) printf("\n");
}
return ;
}

UVa 10201 Adventures in Moving - Part IV的更多相关文章

  1. 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 co ...

  2. UVA 10201 DP

    Adventures in Moving - Part IV 题意: 汽车邮箱容量200升,最初有100升油,要求到达终点油箱中的油不少于100升的最小花费,不能到达终点输出Impossible. 汽 ...

  3. UVA题目分类

    题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...

  4. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...

  5. ACM训练计划step 1 [非原创]

    (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成 ...

  6. 算法竞赛入门经典+挑战编程+USACO

    下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...

  7. 算法入门经典大赛 Dynamic Programming

    111 - History Grading LCS 103 - Stacking Boxes 最多能叠多少个box DAG最长路 10405 - Longest Common Subsequence ...

  8. Root :: AOAPC I: Beginning Algorithm Contests (Rujia Liu) Volume 5. Dynamic Programming

    10192 最长公共子序列 http://uva.onlinejudge.org/index.php?option=com_onlinejudge& Itemid=8&page=sho ...

  9. uva live 2326 - Moving Tables

    把房间号映射在一条坐标上,然后排序,最后找从左到右找一次可行的计划,最后找从左到右找一次可行的计划,最后找从左到右找一次可行的计划,最后找从左到右找一次可行的计划, ............ 次数*1 ...

随机推荐

  1. Java多线程面试、笔试方向---后续补充

    1.ThreadLocal类     线程级别的局部变量,为每个使用该变量的线程提供一个独立的变量副本,每个线程修改副本时不影响其他线程对象的副本.  ThreadLocal实例通常作为静态私有字段出 ...

  2. mac下多个php版本快速切换的方法

    php是为了快速构建一个web页面而迅速被大家广为接受的开源语言,通过不断发展已经有了很多的php开源系统,满足了目前大部分用户的站点需求.1995年初php诞生到现在已经存在多个版本,并且每个版本都 ...

  3. HDU1203:I NEED A OFFER!(01背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=1203 Problem Description Speakless很早就想出国,现在他已经考完了所有需要的考试,准 ...

  4. Centos 6.5安装OpenSSL

    方法一.直接安装 yum install openssl 方法二.下载源码编译安装 1.下载 wget https://www.openssl.org/source/openssl-1.0.2h.ta ...

  5. C语言typeof详解

    前言:     typeof关键字是C语言中的一个新扩展,这个特性在linux内核中应用非常广泛. 一,说明     typeof的参数可以是两种形式:表达式或类型. 1,表达式的的例子:       ...

  6. linux安装composer及安装yii2

    wget https://getcomposer.org/download/1.3.2/composer.phar mv composer.phar /usr/local/bin/composer c ...

  7. 【转】Linux进程绑CPU核

    1. 什么是绑核? 所谓绑核,其实就是设定某个进程/线程与某个CPU核的亲和力(affinity).设定以后,Linux调度器就会让这个进程/线程只在所绑定的核上面去运行.但并不是说该进程/线程就独占 ...

  8. Linux命令: ls -l显示文件和目录的详细资料

    ls -l 显示文件和目录的详细资料

  9. python的subprocess的简单使用和注意事项

    subprocess是python在2.4引入的模块, 主要用来替代下面几个模块和方法: os.systemos.spawn*os.popen*popen2.*commands.* 可以参考PEP32 ...

  10. Python2 和Python3 的差异总结

    一.基本语法差异 1.1 核心类差异 Python3对Unicode字符的原生支持 Python2中使用 ASCII 码作为默认编码方式导致string有两种类型str和unicode,Python3 ...