zoj 2972
2012-04-11 16:36
260 查看
题目 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2972
#include<iostream> #include<stdio.h> #include<map> using namespace std; int Min(int a,int b) { if(a>b) return b; return a; } int main() { map<int,int> mi[2]; map<int,int>::iterator it; int _t,t,n,m,MIN,i,a,b,c,f1,f2; scanf("%d",&t); while(t--) { MIN=9999999; mi[0].clear(); mi[1].clear(); scanf("%d%d",&n,&m); _t=0; for(i=0;i<n;i++) { scanf("%d%d%d%d%d",&a,&b,&c,&f1,&f2); if(!i)//初始的情况 { if(a<b&&a<c)//对a优化 { if(f1<=m) { mi[_t][m-f1]=a; } } if(b<c)//对b的优化 { if(mi[_t][m]>b||mi[_t][m]==0) mi[_t][m]=b; } if(mi[_t][m]>c||mi[_t][m]==0) mi[_t][m]=c; for(it=mi[_t].begin();it!=mi[_t].end();it++) { if(MIN>it->second) { MIN=it->second; } } _t=1-_t; continue; } if(a<b&&a<c)//对a优化 { for(it=mi[1-_t].begin();it!=mi[1-_t].end();it++) { if(f1<=it->first) { if(mi[_t][it->first-f1])//不能为0,因为map函数初始值都是0,排除这种情况 mi[_t][it->first-f1]=Min(mi[_t][it->first-f1],mi[1-_t][it->first]+a); else mi[_t][it->first-f1]=mi[1-_t][it->first]+a; } } } if(b<c)//对b优化 { for(it=mi[1-_t].begin();it!=mi[1-_t].end();it++) { if(mi[_t][it->first]) mi[_t][it->first]=Min(mi[_t][it->first],mi[1-_t][it->first]+b); else mi[_t][it->first]=mi[1-_t][it->first]+b; } } for(it=mi[1-_t].begin();it!=mi[1-_t].end();it++)//c的情况 { if((it->first+f2)>m)//当加的能量>m,则能量直接为m { if(mi[_t][m]) mi[_t][m]=Min(mi[_t][m],mi[1-_t][it->first]+c); else mi[_t][m]=mi[1-_t][it->first]+c; continue; } if(mi[_t][it->first+f2]) mi[_t][it->first+f2]=Min(mi[_t][it->first+f2],mi[1-_t][it->first]+c); else mi[_t][it->first+f2]=mi[1-_t][it->first]+c; } if(i==n-1)//当到最后的时候枚举,找到最小的值 { MIN=9999999; for(it=mi[_t].begin();it!=mi[_t].end();it++) { if(MIN>it->second) { MIN=it->second; } } } _t=1-_t; mi[_t].clear();//别忘了清除数据 } printf("%d\n",MIN); } return 0; }
相关文章推荐
- [动态规划]ZOJ 2972 Hurdles of 110m
- ZOJ Problem Set - 2972
- ZOJ 2972 Hurdles of 110m 【DP 背包】
- ZOJ 2972 Hurdles of 110m 解题报告
- ZOJ 2972 5th省赛 H Hurdles of 110m 【DP】
- zoj 2972 - Hurdles of 110m
- ZOJ Problem Set - 2972 Hurdles of 110m
- ZOJ - 2972-Hurdles of 110m-DP
- ZOJ 2972 Hurdles of 110m(DP)
- ZOJ - 2972 Hurdles of 110m
- zoj 2972 Hurdles of 110m
- zoj 2972 Hurdles of 110m(dp,背包)
- zoj 2972 Hurdles of 110m
- ZOJ 2972 Hurdles of 110m(DP)
- ZOJ-2972
- zoj 2972 Hurdles of 110m
- ZOJ-2972-Hurdles of 110m【5th浙江省赛】【dp】
- ZOJ 2972 Hurdles of 110m
- ZOJ 2972 Hurdles of 110m
- zoj 2972 - Hurdles of 110m