POJ 1991 DP
题意:
思路:
考虑DP
先把事件按照地点顺序排个序
f[i][j][0]表示从i到j还没有去过 现在在i
f[i][j][1]表示从i到j还没有去过 现在在j
那么方程就呼之欲出了
f[i][j][0]=max(min(f[i-1][j][0]+node[i].pos-node[i-1].pos,f[i][j+1][1]+node[j+1].pos-node[i].pos),node[i].t);
f[i][j][1]=max(min(f[i-1][j][0]+node[j].pos-node[i-1].pos,f[i][j+1][1]+node[j+1].pos-node[j].pos),node[j].t);
需要对边界进行特殊处理
//By SiriusRen
#include <cstdio>
#include <algorithm>
using namespace std;
int n,h,b,f[1005][1005][2];
struct Node{int pos,t;}node[1005];
bool cmp(Node a,Node b){if(a.pos!=b.pos)return a.pos<b.pos;return a.t<b.t;}
int main(){
scanf("%d%d%d",&n,&h,&b);
for(int i=1;i<=n;i++)scanf("%d%d",&node[i].pos,&node[i].t);
node[++n].pos=b,n++;
sort(node+1,node+1+n,cmp);
for(int i=1;i<=n;i++)
for(int j=n;j>=i;j--){
if(i==1&&j==n){f[i][j][1]=max(node[j].t,node[j].pos);continue;}
if(i==1){
f[i][j][0]=max(f[i][j+1][1]+node[j+1].pos-node[i].pos,node[i].t);
f[i][j][1]=max(f[i][j+1][1]+node[j+1].pos-node[j].pos,node[j].t);
continue;
}
if(j==n){
f[i][j][0]=max(f[i-1][j][0]+node[i].pos-node[i-1].pos,node[i].t);
f[i][j][1]=max(f[i-1][j][0]+node[j].pos-node[i-1].pos,node[j].t);
continue;
}
f[i][j][0]=max(min(f[i-1][j][0]+node[i].pos-node[i-1].pos,f[i][j+1][1]+node[j+1].pos-node[i].pos),node[i].t);
f[i][j][1]=max(min(f[i-1][j][0]+node[j].pos-node[i-1].pos,f[i][j+1][1]+node[j+1].pos-node[j].pos),node[j].t);
}
for(int i=1;i<=n;i++)if(node[i].pos==b){printf("%d\n",min(f[i][i][0],f[i][i][1]));return 0;}
}
POJ 1991 DP的更多相关文章
- poj 1991 Turning in Homework dp
这个可以证明必须从两边的任务开始交起,因为中间交的任务可以后面经过的时候再交,所以就变成了一个n*n的dp. #include <iostream> #include <cstdio ...
- POJ 1991 Turning in Homework(区间DP)
题目链接 Turning in Homework 考虑区间DP $f[i][j][0]$为只考虑区间$[i, j]$且最后在$a[i]$位置交作业的答案. $f[i][j][1]$为只考虑区间$[i, ...
- hdu 1513 && 1159 poj Palindrome (dp, 滚动数组, LCS)
题目 以前做过的一道题, 今天又加了一种方法 整理了一下..... 题意:给出一个字符串,问要将这个字符串变成回文串要添加最少几个字符. 方法一: 将该字符串与其反转求一次LCS,然后所求就是n减去 ...
- poj 1080 dp如同LCS问题
题目链接:http://poj.org/problem?id=1080 #include<cstdio> #include<cstring> #include<algor ...
- poj 1609 dp
题目链接:http://poj.org/problem?id=1609 #include <cstdio> #include <cstring> #include <io ...
- POJ 1037 DP
题目链接: http://poj.org/problem?id=1037 分析: 很有分量的一道DP题!!! (参考于:http://blog.csdn.net/sj13051180/article/ ...
- Jury Compromise POJ - 1015 dp (标答有误)背包思想
题意:从 n个人里面找到m个人 每个人有两个值 d p 满足在abs(sum(d)-sum(p)) 最小的前提下sum(d)+sum(p)最大 思路:dp[i][j] i个人中 和 ...
- poj 1485 dp
转自:http://www.cnblogs.com/kuangbin/archive/2011/11/12/2246407.html [题目大意] 一条公路上有n个旅馆,选出其中k个设置仓库,一个仓库 ...
- POJ 3017 DP + 单调队列 + 堆
题意:给你一个长度为n的数列,你需要把这个数列分成几段,每段的和不超过m,问各段的最大值之和的最小值是多少? 思路:dp方程如下:设dp[i]为把前i个数分成合法的若干段最大值的最小值是多少.dp转移 ...
随机推荐
- SQL--通过身份证号得到年龄的
/* =======================================创 建 人:CuiYaChao创建日期:2017-08-16功能描述:通过身份证号来计算年龄单元名称: Fun_Ge ...
- gym 100971 J Robots at Warehouse
Vitaly works at the warehouse. The warehouse can be represented as a grid of n × m cells, each of wh ...
- [国家集训队]拉拉队排练 Manancher_前缀和_快速幂
Code: #include <cstdio> #include <algorithm> #include <cstring> using namespace st ...
- [NOI2008]志愿者招募 网络流 建模
题目描述申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完成,其中第i 天 ...
- Tomcat IO阻塞异常
tomcat的maxThreads.acceptCount(最大线程数.最大排队数) tomcat 的Connector配置如下 <Connector port="8080" ...
- 欢迎访问微先锋vXianFeng官方博客
欢迎访问微先锋vXianFeng官方博客,专注微商城.P2P理财.山寨矿机平台研究与开发!
- 今日SGU 5.30
SGU 190 题意:给你个n*n的矩形,然后上面有几个点不能放东西,然后问你能不能用1*2的矩形,把能放 东西的地方放满 收获:一开始想的是,dfs,然后感觉这样的话,代码很长,而且很容易超时, 看 ...
- 【Henu ACM Round#19 A】 Vasya the Hipster
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟题. 两个一起用->min(a,b); 剩下的除2加上去就好 [代码] #include <bits/stdc++. ...
- 用react native 做的一个推酷client
用react native 做的一个推酷client 仅供大家參考.仅仅为抛砖引玉.希望大家能以此来了解react.并编写出很多其它的优质的开源库,为程序猿做出贡献. 用的的组件: Navigator ...
- BestCoder Round #11 (Div. 2)
太菜,仅仅能去Div2.(都做不完 ORZ... 各自是 HDU: 5054pid=5054"> Alice and Bob 5055Bob and math problem 5056 ...