UVA - 11578(背包类dp)
来源:互联网 发布:陆维网络图软件 编辑:程序博客网 时间:2024/06/05 18:09
首先,要对所有的要求,先按时间排序。然后只需对每一步若当前的要求和下一个时间相同,那么把他们两个同时安排,不同,则只安排当下的这个要求,选择有两种1,2
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <set>#include <algorithm>#include <vector>#include <queue>#include <map>using namespace std;typedef unsigned long long LLU;#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)#define rep1(i,n) for(int (i)=1;(i)<=(n);(i)++)const int maxn = 20100;int d[maxn][6][6],n,b[maxn];struct node{ int t,inc,id; int i,j,k,s1,s2; node(int i=0,int j=0,int k=0,int s1=0,int s2=0): i(i),j(j),k(k),s1(s1),s2(s2){} bool operator<(const node& a)const{ return t<a.t||(t==a.t&&inc<a.inc); }}a[maxn],pa[maxn][6][6];void print_ans(int i,int j,int k){ if(i == n+1) return ; node& te = pa[i][j][k]; if(te.i == i+2){ b[a[i].id] = te.s1; b[a[i+1].id] = te.s2; } else b[a[i].id] = te.s1; print_ans(te.i,te.j,te.k);}int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d",&n); memset(a,0,sizeof(a)); int res = 15*n; rep1(i,n){ scanf("%d %d",&a[i].t,&a[i].inc); a[i].inc/=10; a[i].id = i; } sort(a+1,a+1+n); for(int i=n+1;i>=1;i--) rep1(j,5) rep1(k,5){ if(i == n+1){ d[i][j][k] = (j+k-2)*10; continue; } d[i][j][k] = 1e9; int& ans = d[i][j][k]; node& path=pa[i][j][k]; if(i+1<=n&&a[i+1].t==a[i].t){ int ans1 = d[i+2][a[i].inc][a[i+1].inc]+(abs(a[i].inc-j)+abs(a[i+1].inc-k))*10; int ans2 = d[i+2][a[i+1].inc][a[i].inc]+(abs(a[i+1].inc-j)+abs(a[i].inc-k))*10; if(ans1 <= ans2){ ans = ans1; path=node(i+2,a[i].inc,a[i+1].inc,1,2); } else { ans = ans2; path=node(i+2,a[i+1].inc,a[i].inc,2,1); } } else{ int ans1 = d[i+1][a[i].inc][k]+abs(a[i].inc-j)*10; int ans2 = d[i+1][j][a[i].inc]+abs(a[i].inc-k)*10; if(ans1<=ans2){ path = node(i+1,a[i].inc,k,1); ans = ans1; } else { path = node(i+1,j,a[i].inc,2); ans = ans2; } } } printf("%d\n",d[1][1][1]+res); print_ans(1,1,1); rep1(i,n) { printf("%d\n",b[i]); } } return 0;}/*132 402 501 40*/
0 0
- UVA - 11578(背包类dp)
- UVA 624 CD 01背包(DP)
- UVa 147 Dollars(DP完全背包)
- UVa 147 Dollars(DP完全背包)
- UVa 624 CD (DP 01背包)
- Uva 624 背包DP
- Uva 562 背包DP
- Uva 147 背包DP
- UVa 12563 dp 背包
- UVA 674 Coin Change(dp + 完全背包)
- UVA 10163 Storage Keepers (01背包DP + 二分)
- UVA - 674 - Coin Change (背包型DP)
- uva--10163(dp,01背包,双肩包)
- UVA 624 CD(01背包+dp打印路径)
- UVA 10817 Headmaster's Headache(01背包+状压DP)
- UVa 674 - Coin Change 背包dp
- uva 1407 Caves (树形背包dp)
- UVA 624 CD(DP + 01背包)
- java命令模式
- BS的初步小结
- 圆投影匹配算法描述及实现
- zabbix应用之Low-level discovery监控磁盘IO
- Remove Duplicates from Sorted Array II
- UVA - 11578(背包类dp)
- 通过Edit Distance问题理解动态规划算法
- 编程之美 2013 全国挑战赛 资格赛 题目二 长方形
- RFID与物联网的关系。
- Mac下安装和管理Java
- 知识体系
- poj 1041 John's trip 欧拉路
- 一、Java图形化界面设计——容器(JFrame)
- HDU 2614 Beat