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