UVA 11578 - Situp Benches(dp)
题目链接:11578 - Situp Benches
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define min(a,b) ((a)<(b)?(a):(b))
const int N = 10005;
int t, n, i, j, k, dp[N][5][5], ans, an[N];
struct Stu {
int t, l, id;
} s[N]; struct Out {
int n, l, r, out1, out2;
} out[N][5][5]; bool cmpt(Stu a, Stu b) {
return a.t < b.t;
} bool cmpid(Stu a, Stu b) {
return a.id < b.id;
} void print(int n, int l, int r) {
Out next = out[n][l][r];
if (n == 0) return;
if (next.out2 != -1) {
an[s[n - 1].id] = next.out1;
an[s[n].id] = next.out2;
}
else {
an[s[n].id] = next.out1;
}
print(next.n, next.l, next.r);
} int main() {
scanf("%d", &t);
while (t--) {
ans = INF;
memset(dp, INF, sizeof(dp));
dp[0][0][0] = 0;
scanf("%d", &n);
for (i = 1; i <= n; i++) {
scanf("%d%d", &s[i].t, &s[i].l);
s[i].l = s[i].l / 10 - 1;
s[i].id = i;
}
sort(s + 1, s + n + 1, cmpt);
for (i = 1; i <= n; i++) {
int tmp1 = s[i].l;
if (i == n || s[i].t != s[i + 1].t) {
for (j = 0; j < 5; j++) {
for (k = 0; k < 5; k++) {
if (dp[i][tmp1][k] > dp[i - 1][j][k] + abs(tmp1 - j) * 10) {
dp[i][tmp1][k] = dp[i - 1][j][k] + abs(tmp1 - j) * 10;
out[i][tmp1][k].l = j; out[i][tmp1][k].r = k; out[i][tmp1][k].n = i - 1;
out[i][tmp1][k].out1 = 1; out[i][tmp1][k].out2 = -1;
}
if (dp[i][j][tmp1] > dp[i - 1][j][k] + abs(tmp1 - k) * 10) {
dp[i][j][tmp1] = dp[i - 1][j][k] + abs(tmp1 - k) * 10;
out[i][j][tmp1].l = j; out[i][j][tmp1].r = k; out[i][j][tmp1].n = i - 1;
out[i][j][tmp1].out1 = 2; out[i][j][tmp1].out2 = -1;
}
}
}
}
else {
int tmp2 = s[i + 1].l;
for (j = 0; j < 5; j++) {
for (k = 0; k < 5; k++) {
if (dp[i + 1][tmp1][tmp2] > dp[i - 1][j][k] + abs(tmp1 - j) * 10 + abs(tmp2 - k) * 10) {
dp[i + 1][tmp1][tmp2] = dp[i - 1][j][k] + abs(tmp1 - j) * 10 + abs(tmp2 - k) * 10;
out[i + 1][tmp1][tmp2].l = j; out[i + 1][tmp1][tmp2].r = k; out[i + 1][tmp1][tmp2].n = i - 1;
out[i + 1][tmp1][tmp2].out1 = 1; out[i + 1][tmp1][tmp2].out2 = 2;
}
if (dp[i + 1][tmp2][tmp1] > dp[i - 1][j][k] + abs(tmp2 - j) * 10 + abs(tmp1 - k) * 10) {
dp[i + 1][tmp2][tmp1] = dp[i - 1][j][k] + abs(tmp2 - j) * 10 + abs(tmp1 - k) * 10;
out[i + 1][tmp2][tmp1].l = j; out[i + 1][tmp2][tmp1].r = k; out[i + 1][tmp2][tmp1].n = i - 1;
out[i + 1][tmp2][tmp1].out1 = 2; out[i + 1][tmp2][tmp1].out2 = 1;
}
}
}
i++;
}
}
int lv, rv;
for (j = 0; j < 5; j++) {
for (k = 0; k < 5; k++) {
if (ans > dp[n][j][k] + j * 10 + k * 10) {
ans = dp[n][j][k] + j * 10 + k * 10;
lv = j; rv = k;
}
}
}
printf("%d\n", ans + 15 * n);
print(n, lv, rv);
for (i = 1; i <= n; i++)
printf("%d\n", an[i]);
}
return 0;
}
UVA 11578 - Situp Benches(dp)的更多相关文章
- uva 116 Unidirectional TSP (DP)
uva 116 Unidirectional TSP Background Problems that require minimum paths through some domain appear ...
- UVa 103 - Stacking Boxes(dp求解)
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...
- UVA 674 Coin Change(dp)
UVA 674 Coin Change 解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730#problem/ ...
- UVA 1619 Feel Good(DP)
Bill is developing a new mathematical theory for human emotions. His recent investigations are dedic ...
- POJ1015 && UVA - 323 ~Jury Compromise(dp路径)
In Frobnia, a far-away country, the verdicts in court trials are determined by a jury consisting of ...
- UVa 12186 Another Crisis (DP)
题意:有一个老板和n个员工,除了老板每个员工都有唯一的上司,老板编号为0,员工们为1-n,工人(没有下属的员工),要交一份请愿书, 但是不能跨级,当一个不是工人的员工接受到直系下属不少于T%的签字时, ...
- 【UVa】Palindromic Subsequence(dp+字典序)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=465&page=s ...
- UVa 1638 - Pole Arrangement(dp)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 1638 Pole Arrangement (dp)
题意:有n个长度为1到n的柱子排列在一起,从左边看有l根从右边看有r根,问你所以排列中满足这种情况的方案数 题解:就是一个dp问题,关键是下标放什么,值代表什么 使用三维dp,dp[i][j][k]= ...
随机推荐
- sqlserver数据库的权限设置
1.先用Windows账户登陆,然后在安全性中添加用户--SQL server 身份验证,用户名,密码2.用户映射--勾选对应的数据库--数据库角色成员身份--db_owner public
- Nginx+PHPSTORM+Xdebug 配置
1. php Xdebug扩展 下载 https://xdebug.org/download.php 选择自己的版本下载,会得到一个dll文件 例如 php_xdebug-2.7.0alpha1-7 ...
- ACM程序设计选修课——Problem D: (ds:树)合并果子(最优二叉树赫夫曼算法)
Problem D: (ds:树)合并果子 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 80 Solved: 4 [Submit][Status][ ...
- 《常见问题集》Maven
1.Maven Eclipse插件要不要安装? [解决方法] 打开你的Eclipse,如果已经有Maven了就不用装插件了. 方法一:没有的话或者下载最新的Eclipse(maven插件,eclips ...
- Repeated Substrings(UVAlive 6869)
题意:求出现过两次以上的不同子串有多少种. /* 用后缀数组求出height[]数组,然后扫一遍, 发现height[i]-height[i-1]>=0,就ans+=height[i]-heig ...
- poj Pseudoprime numbers 3641
Pseudoprime numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10903 Accepted: 4 ...
- hdu 6118 度度熊的交易计划
度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- FZOJ Problem 2103 Bin & Jing in wonderland
...
- 【NOIP2016游记】
day-5:上午看了火箭打马刺 火箭差点翻盘但老大爷们还是稳 下午一场五校 T1T2原题做过 T3分块 day-4:上午五校1小时写3道暴力 2个半小时优化 然而还不知道拿了多少 %%%CC T2树链 ...
- 机器人程序设计——之如何正确入门ROS | 硬创公开课(附视频/PPT)【转】
转自:http://blog.exbot.net/archives/2966 导语:本期公开课面向想入手ROS却又不知从何下手的小伙伴,为大家梳理好学习思路. ROS和Android一样是开源的,功能 ...