Adventures in Moving - Part IV

题意:

汽车邮箱容量200升,最初有100升油,要求到达终点油箱中的油不少于100升的最小花费,不能到达终点输出Impossible.

汽车走1单位距离消耗1升油。

输入t组数据

输入n表示要求从起点到距离为n的点

输入若干个加油站的a,b,表示加油站距离起点的距离和每升油的价格;

代码:

//dp[i][j]=min(dp[i][j],dp[i-1][j+dis-k]+k*w),dp[i][j]表示到达
//i加油站时还剩j升油,dis表示i到i-1的距离,k(0<=k<=j)表示在i
//加油站买多少油,最后要求dp[m][100+n-id[m]]!=inf.
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int inf=0x3f3f3f3f;
int dp[][],id[],w[];
char s[];
int main()
{
int t,n;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
getchar();
memset(dp,inf,sizeof(dp));
dp[][]=;
int cnt=;
while(gets(s)!=NULL&&s[]!='\0'){
cnt++;
sscanf(s,"%d %d",&id[cnt],&w[cnt]);
if(id[cnt]>n) cnt--;
}
id[]=;
for(int i=;i<=cnt;i++){
int dis=id[i]-id[i-];
for(int j=;j<=;j++){
for(int k=;k<=j;k++)
if(j+dis-k<=)
dp[i][j]=min(dp[i][j],dp[i-][j+dis-k]+k*w[i]);
}
}
if(n-id[cnt]>||dp[cnt][+n-id[cnt]]==inf) printf("Impossible\n");
else printf("%d\n",dp[cnt][+n-id[cnt]]);
if(t) printf("\n");
}
return ;
}
/*
1
500
100 999
150 888
200 777
300 999
400 1009
450 1019
500 1399
*/

最新文章

  1. bzoj 1711 [Usaco2007 Open]Dining吃饭&amp;&amp;poj 3281 Dining
  2. EL表达式 (详解)
  3. 学习笔记2:前端PS切图
  4. Linux下实现流水灯等功能的LED驱动代码及测试实例
  5. 更改input【type=file】样式
  6. Centos6.4配置Fedora EPEL源附配置hop5.in源
  7. PhoneGap 开发笔记
  8. [UWP小白日记-15]在UWP手机端实时限制Textbox的输入
  9. firewalld 操作实践
  10. nmon的安装使用
  11. Python txt文件读取写入字典的方法(json、eval)
  12. HS BDC HDU - 3472(混合欧拉路径)
  13. 用Python中的re做信息筛选
  14. jquery----数据增删改
  15. chrome版本与对应的chromedriver驱动【转载】
  16. [C++]简单的udp通信
  17. I2C三态门Verilog
  18. jq实现多级菜单
  19. Spring Data 增删改查事务的使用(七)
  20. 8、springboot之定时任务

热门文章

  1. PAT-甲级解题目录
  2. ajax获取动态列表数据后的分页问题
  3. 测试下markdown!
  4. Hadoop学习(一):完全分布式集群环境搭建
  5. HDU 4308 Saving Princess claire_(简单BFS)
  6. 业务迁移---web
  7. 最小生成树(Kruskal和Prim算法)
  8. Thunder团队第三周 - Scrum会议1
  9. RXSwift--登录注册那点事
  10. 按Backspace键删除时,会出现^H