3379: [Usaco2004 Open]Turning in Homework 交作业

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 50  Solved: 39
[Submit][Status][Discuss]

Description

    贝茜有C(1≤C≤1000)门科目的作业要上交,之后她要去坐巴士和奶牛同学回家.
每门科目的老师所在的教室排列在一条长为H(1≤H≤1000)的走廊上,他们只在课后接收作业.交作业不需要时间.贝茜现在在位置0,她会告诉你每个教室所在的位置,以及走廊出口的位置.她每走1个单位的路程,就要用1秒.她希望你计算最快多久以后她能交完作业并到达出口.

Input

 第1行输入三个整数C,H,B,B是出口的位置.之后C行每行输入两个整数,分别表示一个老师所在的教室和他的下课时间.

Output

    贝茜最早能够到达出口的时间.

Sample Input

4 10 3
8 9
4 21
3 16
8 12

Sample Output

22

dp[i][j][0]表示目前位置在(i, j]的作业一本都没有收,其它位置全收了并且牛在位置i上的最快时间

dp[i][j][1]表示目前位置在[i, j)的作业一本都没有收,其它位置全收了并且牛在位置j上的最快时间

转移:(s[i].x是第i个作业的位置,s[i].t是能收的时间)

dp[i][j][0] = min(max(dp[i-1][j][0]+s[i].x-s[i-1].x, s[i].t), max(dp[i][j+1][1]+s[j+1].x-s[i].x, s[i].t));

dp[i][j][1] = min(max(dp[i-1][j][0]+s[j].x-s[i-1].x, s[j].t), max(dp[i][j+1][1]+s[j+1].x-s[j].x, s[j].t));

为什么这样转移一定是对的(也就是牛为什么一定是把两侧收完再收中间的最优)呢?

假设只有5本作业,位置分别在1,2,3,4,5,而牛的路线是1-5-3-4-2,那么无论这5本作业什么时候才可以收,路线1-5-4-3-2一定只会比上者更优!

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef struct Res
{int x, t;bool operator < (const Res &b) const{if(x<b.x)return 1;return 0;}
}Res;
Res s[1005];
int dp[1005][1005][2];
int main(void)
{int n, len, E, i, j, ans;scanf("%d%d%d", &n, &len, &E);for(i=1;i<=n;i++)scanf("%d%d", &s[i].x, &s[i].t);sort(s+1, s+n+1);memset(dp, 62, sizeof(dp));dp[1][n][0] = max(s[1].x, s[1].t);dp[1][n][1] = max(s[n].x, s[n].t);for(i=1;i<=n;i++){for(j=n;j>=1;j--){if(i==1 && j==n)continue;dp[i][j][0] = min(max(dp[i-1][j][0]+s[i].x-s[i-1].x, s[i].t), max(dp[i][j+1][1]+s[j+1].x-s[i].x, s[i].t));dp[i][j][1] = min(max(dp[i-1][j][0]+s[j].x-s[i-1].x, s[j].t), max(dp[i][j+1][1]+s[j+1].x-s[j].x, s[j].t));}}ans = 2147483647;for(i=1;i<=n;i++)ans = min(ans, min(dp[i][i][1], dp[i][i][0])+abs(E-s[i].x));printf("%d\n", ans);return 0;
}

bzoj 3379: [Usaco2004 Open]Turning in Homework 交作业(区间DP)相关推荐

  1. BZOJ 3379: [Usaco2004 Open]Turning in Homework 交作业

    Description     贝茜有C(1≤C≤1000)门科目的作业要上交,之后她要去坐巴士和奶牛同学回家. 每门科目的老师所在的教室排列在一条长为H(1≤H≤1000)的走廊上,他们只在课后接收 ...

  2. [BZOJ 4350]括号序列再战猪猪侠 题解(区间DP)

    [BZOJ 4350]括号序列再战猪猪侠 Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个 ...

  3. bzoj 1710: [Usaco2007 Open]Cheappal 廉价回文【区间dp】

    只要发现添加一个字符和删除一个字符是等价的,就是挺裸的区间dp了 因为在当前位置加上一个字符x就相当于在他的对称位置删掉字符x,所以只要考虑删除即可,删除费用是添加和删除取min 设f[i][j]为从 ...

  4. POJ 1991 Turning in Homework ★(区间DP)

    题目大意:在一条长为 H (0..1000) 的走廊上有 C (0..1000) 个教室,Bessie 需要去每个教室都交一次作业.每个作业有个最早可以提交的时间.Bessie 在交完所有作业后需要去 ...

  5. [NodeJs]如何用NodeJs查查谁没交作业

    [NodeJs]查查谁没交作业?看看这里就够了 网课大背景之下,很多作业都需要通过电子版交上,但有些时候,明明知道份数不对,却还要一份份去核查到底是谁没有交,十分繁琐:为什么不能运用一下NodeJs, ...

  6. 【BZOJ 4565】 [Haoi2016]字符合并 区间dp+状压

    考试的时候由于总是搞这道题导致爆零~~~~~(神™倒序难度.....) 考试的时候想着想着想用状压,但是觉得不行又想用区间dp,然而正解是状压着搞区间,这充分说明了一件事,状压不是只是一种dp而是一种 ...

  7. BZOJ.1032.[JSOI2007]祖码(区间DP)

    题目链接 BZOJ 洛谷 AC代码: 区间DP,f[i][j]表示消掉i~j需要的最少珠子数. 先把相邻的相同颜色的珠子合并起来. 枚举方法一样,处理一下端点可以碰撞消除的情况就行. 当然合并会出现问 ...

  8. 《降级论》《按时交作业的学生何以常穿脏袜子》读后感

    今天bill推荐了一篇文章http://blog.kowtime.com/?p=16,白天略读,晚上仔细读了一遍.作者主要阐述了这样几个观点: 1.it行业是个比较"高级"的行业, ...

  9. python 字典练习 记录学生是否交作业的小程序

    #记录学生是否交作业的小程序 #包括:学生名字.日期.状态 1 data={ 2 'taotao':{ 3 '2018-6-3':'已交', 4 '2018-6-4':'未交', 5 '2018-6- ...

最新文章

  1. 马云最新演讲:未来10年,人类将面临AI、IoT和区块链等三大技术巨大挑战!
  2. RandLA-Net测试
  3. Hadoop 停止hdfs和yarn的命令
  4. 石化总部java面试题_中国石化面试经验
  5. JSON.parse()解析单引号错误的问题
  6. PowerDesigner 中将Comment(注释)及Name(名称)内容互相COPY的VBS代码
  7. 【自然语言处理系列】预训练模型原理和实践综述 | 附汇报PPT原稿和18篇论文
  8. 计算机音乐数字乐谱核爆神曲,核爆神曲——aLIEz钢琴谱钢琴简谱 数字谱 钢琴双手简谱.pdf...
  9. 寂寞情来情去——忆纳兰词
  10. 笔记本当服务器显示器怎么连接,笔记本连接显示器,详细教您笔记本怎么连接显示器...
  11. 仿今日头条后台管理系统(一)
  12. 数据可视化实验:python数据可视化-柱状图,条形图,直方图,饼图,棒图,散点图,气泡图,雷达图,箱线图,折线图
  13. DialogFragment设置不可取消
  14. VS2017 生成DLL 供python 调用
  15. BS与CS的联系与区别
  16. Linux下简单创建ThinkPHP 6.0的网站 - 简单前后端 (未完待续)
  17. Gigaphoton供给最新版ArF受激准分子激光器GT65A
  18. 微信小程序—WXCC模板样式
  19. 浅谈classList
  20. Crosswalk Project for Android

热门文章

  1. python能做什么项目-python能做什么项目
  2. python学了真的很有用吗-会Python的人工作不会太差?编程课真的有必要学吗?
  3. 为什么黑客都用python-为什么如此多的黑客都用python?
  4. python画图代码大全-Python科学画图代码分享
  5. python 下载文件-python实现从ftp服务器下载文件
  6. 对instance进行二次封装
  7. Element UI el-table 表格多选的使用
  8. LAV Filter 源代码分析 3: LAV Video (1)
  9. java 有趣注释_Java8 中有趣酷炫的小技巧
  10. vue中的$event