USACO Open 2004,Turning in Homework(提交作業)
本題大意如下:
Turning in Homework
Description
Chongkan 在 ”zqh_wz大學”選修了C門課,他要把這些課的作業交給老師,然後去車站和同學們一起回家
老師們在辦公室裡,辦公室要等他們下課後才開,第 i 門課的辦公室在Ti時間後開放
所有的辦公室都在一條走廊上,這條走廊長H米,一開始Chongkan在走廊的最左邊,第i門課的辦公室距離Chongkan的長度為Xi,車站距離Chongkan的長度為B
Chongkan可在走廊上自由行走,每時刻可以向右或向左移動一單位的距離,也可以選擇在任何地方暫停Chongkan如果走到辦公室所處的位置,而且這間辦公室已經開門了的話,就可以把作業交掉,不用花時間在走進辦公室上
請幫助Chongkan確定交完所有作業,再走到車站的最短時間Input Description
第1行:C,H,B
第2行到第C+1行:每行兩個整數:Xi,TiOutput Description
輸出一個整數 :走到車站的最短時間
Sample Input
4 10 3
8 9
4 21
3 16
8 12Sample Output
22
Data Size & Hint
1 <= C <= 1,000
1 <= H <= 1,000
0 <= B <= H
0<=Ti<=10,000
這題還是dp題,不過確實區間dp,話說我以前好像沒有遇到區間dp,
剛剛去查了一下這題的官方的題解才知道還有這種dp型別
以前做的dp題幾乎都是01揹包、完全揹包、樹形dp再加上什麼線段樹、樹狀陣列之類的資料結構維護
好吧,剛剛經過旁邊AK大神Kanosword的點醒
發現從前寫的“取數遊戲“”矩陣取數遊戲”都是區間qp。。
只是當時不懂事,不知道。。。
那麼對於一個區間dp問題,我們首先要搞明白這到底是一個大區間推小區間的問題還是小區間推出大區間的問題
根據題意,我們需要逗逼的在這條走廊上走來走去(話說車站在走廊上這讓我很是費解)。。
而我們需要確認一個最終點前往車站,
因此不難看出這是一個大區間推出小區間的問題
顯而易見的是dp值肯定存的是在某種狀態下的時間,而dp的下標肯定有一維是l,一維是r。。。
那麼問題來了,在這麼一個[l,r]的區間中的狀態五花八門,究竟是哪一種呢?
這個時候就考驗你的腦洞了,你要思考的是儲存哪種狀態滿足拓撲排序
這個過程博主就不詳細說明了,因為這是一種較為常見的區間dp,大部分人都已經掌握了(當初博主智障)
於是我們得出了這麼一個關係:
dp[i][j][0]=min(max(dp[i-1][j][0]+x[i]-x[i-1],t[i]),max(dp[i][j+1][1]+x[j+1]-x[i],t[i]));
dp[i][j][1]=min(max(dp[i-1][j][0]+x[j]-x[i-1],t[j]),max(dp[i][j+1][1]+x[j+1]-x[j],t[j]));
//dp[i][j][0]代表在[i,j]這個區間中只交了第i個作業
//dp[i][j][1]代表在[i,j]這個區間中只交了第j個作業
AC程式碼如下:
#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
#define oo 2000000000
#define M 1005
struct node{
int x,t;
bool operator <(const node &A)const{//必須排序!!!!!!!!
if(x!=A.x)return x<A.x;
return t<A.t;
}
}s[M];
int dp[M][M][2];
int main(){
int c,h,b,ans=oo;
scanf("%d %d %d",&c,&h,&b);
for(int i=1;i<=c;i++)scanf("%d %d",&s[i].x,&s[i].t);
sort(s+1,s+c+1);
dp[1][c][0]=max(s[1].x,s[1].t);//別忘了給[1,c]這個區間賦值
dp[1][c][1]=max(s[c].x,s[c].t);
for(int k=c-2;k>=0;k--){//從長度打的區間一路列舉到長度曉得區間
for(int i=1;i+k<=c;i++){
int j=i+k;
dp[i][j][0]=oo;
dp[i][j][1]=oo;
if(i>1){//由於下標原因不得不寫的麻煩一些。。。。
dp[i][j][0]=min(dp[i][j][0],max(dp[i-1][j][0]+s[i].x-s[i-1].x,s[i].t));
dp[i][j][1]=min(dp[i][j][1],max(dp[i-1][j][0]+s[j].x-s[i-1].x,s[j].t));
}if(j<c){
dp[i][j][0]=min(dp[i][j][0],max(dp[i][j+1][1]+s[j+1].x-s[i].x,s[i].t));
dp[i][j][1]=min(dp[i][j][1],max(dp[i][j+1][1]+s[j+1].x-s[j].x,s[j].t));
}
}
}//for(int i=1;i<=c;i++)ans=min(min(dp[i][i][0]+abs(s[i].x-b),dp[i][i][1]+abs(s[i].x-b)),ans);
//好吧,這裡是博主智障了
//改成這個↓
for(int i=1;i<=c;i++)ans=min(dp[i][i][0]+abs(s[i].x-b),ans);
printf("%d\n",ans); // ↑
return 0; //(或1)
}
相關推薦
USACO Open 2004,Turning in Homework(提交作業)
本題大意如下: Turning in Homework Description Chongkan 在 ”zqh_wz大學”選修了C門課,他要把這些課的作業交給老師,
POJ 1991 Turning in Homework(區間DP)
clu sin highlight sort stream ret spa 作業 ref 題目鏈接 Turning in Homework 考慮區間DP f[i][j][0]為只考慮區間[i, j]且最後在a[i]位置交作業的答案。 f[i][j][1]為只考慮區間[
BZOJ 3379: [Usaco2004 Open]Turning in Homework 交作業
() sam sca operator 計算 images its main src Description 貝茜有C(1≤C≤1000)門科目的作業要上交,之後她要去坐巴士和奶牛同學回家. 每門科目的老師所在的教室排列在一條長為H(1≤H≤1000)的走廊上,他
UVA-12657 Boxes in a Line (模擬,雙向連結串列(陣列實現))
第一次對陣列實現雙向連結串列的練習,理解了發現數組實現真方便… 題目:UVA-12657 題目描述: 你有n個盒子在桌子上的一條線上從左到右編號為1……n。你的任務是模擬四種操作 1 X Y 移動盒子編號X到盒子編號Y的左邊(如果X已經在Y的左邊了就忽略) 2 X Y 移
Netty in Action (十四) 第五章節 第三部分 ByteBufHolder,ByteBuf分配,計數引用
5.4 Interface ByteBufHolder 我們經常在ByteBuf中儲存一些正常資料之外,我們有時候還需要增加一些各式各樣的屬性值,一個Http響應體就是一個很好的例子,除了按照位元組傳輸過來的主體內容,還有狀態碼,cookie等資訊 Netty提供了By
解決jquery ajax在跨域訪問post請求的時候,ie9以下無效(包括ie9)的問題
jquery src actor div tick 屬性 dex 啟用 logs 最近在做項目的時候遇到一個問題,就是跨域請求ajax的時候ie9以下的瀏覽器不可以訪問,直接執行error裏面的代碼,但是也不報錯,就上網查了查,發現了一個很好用的方法,在這裏記錄一下,也希望
USACO 6.5 Betsy's Tour (插頭dp)
tours print eve 出現 png lin per fine 麻煩 Betsy‘s TourDon Piele A square township has been divided up into N2 square plots (1 <= N <=
7,裝飾者模式(Decorator Pattern)動態的給一個對象添加一些額外的職責。就增加功能來說,此模式比生成子類更為靈活。繼承關系的一個替換方案。
做到 活性 splay .com 重新 裝飾 run play 情況 裝飾( Decorator )模式又叫做包裝模式。通過一種對客戶端透明的方式來擴展對象的功能,是繼承關系的一個替換方案。 裝飾模式就是把要添加的附加功能分別放在單獨的類中,並讓這個
robotframework+selenium搭配chrome瀏覽器,web測試案例(搭建篇)
web 留言 大小寫 都沒有 小寫 mirrors png path input 這兩天發布版本 做的事情有點多,都沒有時間努力學習了,先給自己個差評,今天折騰了一天, 把robotframework 和 selenium 還有appnium 都研究了一下 ,大概有個譜,
Opencv入門-第一回-夢牽機器視覺翼,初識Opencv域(安裝Opencv)
x64 配置 發展 免費 -c 找到 版本號 開始 名稱 各位看官,您是不是瞅著Opencv進來的?(你這不是廢話嗎>_>) 這Opencv(開源計算機視覺庫)啊,說來話長,最初是上個世紀末(1999年)由Intel建立起來的。近十多年人工智能這匹黑馬突然出現,
Making Genome in Berland (DFS+思維)
put win types addition ecif pes set mini cati 個人心得:被這周的專題名坑了,一直用字典樹,明明題目看得很清楚了,不存在相同的字母,即每個字母最多只有一個直接後驅,那麽只要用DFS走開頭就好了, 思想很巧妙,用vector,記錄後
用微信小程序來做直播,效果非常不錯哦,延時低(組圖)
拓展 tro water align div csdn 手機瀏覽器 問題 分享圖片 第1部分:大至描述 用微信小程序來發起直播(推流); 用戶即可以通過微信直接觀看,也可以通過PC端web瀏覽器觀看或通過手機瀏覽器觀看。 第2部分:提示說明 圖1,是小程序界面方面的
課程四(Convolutional Neural Networks),第三 周(Object detection) —— 0.Learning Goals
member 數據 定位 finding dataset pre intersect sta nal Learning Goals: Understand the challenges of Object Localization, Object Detection a
課程四(Convolutional Neural Networks),第三 周(Object detection) —— 1.Practice questions:Detection algorithms
car mage 分享圖片 nbsp blog obj 分享 圖片 pos 【解釋】 tree的兩個bounding boxes 都要保留,因為交並比小於0.5;car 0.73保留;pedestrain 0.98保留;motor
用一個簡單的例子比較SVM,MARS以及BRUTO(R語言)
err r語 模型訓練 n! 也有 kernel 訓練 tps mea 背景重述 本文是ESL: 12.3 支持向量機和核中表12.2的重現過程。具體問題如下: 在兩個類別中產生100個觀測值。第一類有4個標準正態獨立特征\(X_1,X_2,X_3,X_4\)。第二類也有四
Linux學習從入門到打死也不放棄,完全筆記整理(持續更新)
linux 運維 學習筆記 這是一片學習筆記的匯總,查看內容請點擊各章節介紹。 第一章,計算機基礎和linux基本介紹 http://blog.51cto.com/13683480/2095433 第二章,linux基礎 http://blog.51
周雖舊邦,其命維新(學習日誌)
真的 編程 滿足 習慣 是什麽 ID 參考 如何 就是 閑話 說到學習,小時候根深蒂固的被灌輸的一些習慣真的是害死人。例如,某些人經過刻苦學習取得某某成就。大多學生不經過思辨就真的這樣認為了,既然痛苦那就愉快的玩耍吧。其實這就如同歷史書上的故事,不管你信不信,反正我不太信
int和Integer,String和String(包裝類)
內存空間 mage image out info clas 技術 ima spa 1.int和Integer的值如果是一樣的,則是在內存中開辟相同的內存空間 2.但是String和String(包裝類)是不一樣的 代碼演示: int a=1;
Programing in Python3(Second Edition)_實例
.com input exc 實用 ive 就是 bubuko 前言 最大 Programming in Python3 (Second Edition)實例 前言:在學習Python的過程中推薦一本書,《Programming in Python3 》也就是我以前用過的
ACM-ICPC 2018 沈陽賽區網絡預賽 Made In Heaven(K短路)題解
clas names turn scan sin cst ++ ini struct 思路:K短路裸題 代碼: #include<queue> #include<cstring> #include<set> #include<ma