UVA 10201-Adventures in Moving – Part4(DP)
来源:互联网 发布:淘宝收不到自己的店铺 编辑:程序博客网 时间:2024/06/08 16:03
题目大意:有一辆卡车每一公里耗油1升,油箱上限200升,初始时有100升油,现在中间有若干个加油站,每个加油站离初始点有一定的距离并且每个加油站都有自己的每升油价,可以选择一些加油,跑完全程以后车至少要剩100升油。问最小的花费。
用d[i][j]表示到达第i个加油站并且加油(也许不加油)过后,到达j升油最小的花费。a[i].loc和a[i].pri表示加油站的坐标和价格。
分两种情况,若在这个加油站至少加一升,那么由d[i][j-1]+a[i].pri推来,若在这个加油站不加油,那么由d[i-1][j+a[i].loc-a[i-1].loc]推来。
状态转移方程:d[i][j]=max {d[i][j-1]+a[i].pri,d[i-1][j+a[i].loc-a[i-1].loc] }
#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct{int loc;int pri;}Sta;Sta a[110];int d[110][210];char e[310];int main(void){int i,j,u,v,p,pi,qi,top,lo,minp,OK;scanf("%d",&pi);for(qi=1;qi<=pi;qi++){scanf("%d",&p);while(getchar()==' '){;}top=0;while((gets(e+1)!=NULL)&&(strcmp(e+1,"")!=0)){lo=strlen(e+1);i=1;while((e[i]>'9')||(e[i]<'0')){i++;}u=0;while((e[i]>='0')&&(e[i]<='9')){u=u*10+e[i]-'0';i++;}while((e[i]>'9')||(e[i]<'0')){i++;}v=0;while((e[i]>='0')&&(e[i]<='9')&&(i<=lo)){v=v*10+e[i]-'0';i++;}if((top==0)||(u!=a[top-1].loc)){top++;a[top].loc=u;a[top].pri=v;}else if((u==a[top].loc)&&(v<a[top].pri)){a[top].pri=v;}}if(((top==0)&&(p!=0))||(a[1].loc>100)||(p-a[top].loc>100)){printf("Impossible\n");}else if((top==0)&&(p==0)){printf("0\n");}else{for(j=0;j<=100-a[1].loc;j++){d[1][j]=0;}for(j=100-a[1].loc+1;j<=200;j++){d[1][j]=d[1][j-1]+a[1].pri;}OK=1;for(i=2;i<=top;i++){if(a[i].loc-a[i-1].loc>200){OK=0;break;}d[i][0]=d[i-1][a[i].loc-a[i-1].loc];for(j=1;j<=200;j++){minp=d[i][j-1]+a[i].pri;if((j+a[i].loc-a[i-1].loc<=200)&&(d[i-1][j+a[i].loc-a[i-1].loc]<minp)){minp=d[i-1][j+a[i].loc-a[i-1].loc];}d[i][j]=minp;}}if(OK==0){printf("Impossible\n");}else{printf("%d\n",d[top][100+p-a[top].loc]);}}if(qi!=pi){printf("\n");}}return 0;}
0 0
- UVA 10201-Adventures in Moving – Part4(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)
- uva 10201 - Adventures in Moving - Part IV(dp)
- UVA 10201 Adventures in Moving - Part IV 车站加油 dp
- Adventures in Moving - Part IV - UVa 10201 dp
- Adventures in Moving - Part IV+uva+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
- POJ 题目1936 All in All(水题,暴力)
- HDU 2855解题报告
- 在 AIX 操作系统上如何安装 IBM DB2 9版本的分区环境
- Linux Kernel 4.0 RC1 发布!
- 保护双因子认证体系
- UVA 10201-Adventures in Moving – Part4(DP)
- HDOJ 1234 开门人和关门人(排序)(浙大2005研究生复试)
- 集体亮相:用cocos开发的高逼格3D游戏
- ns3 g++ 编译
- 服务虚拟化测试
- 数据产品思考
- 数据结构与算法(day-1)
- NSLayoutConstraint-代码实现自动布局的函数用法说明
- Java设计模式-5-原型模式