動態規劃 洛谷P1868 饑餓的奶牛
阿新 • • 發佈:2017-06-04
文字 div color nod code sin stream 水題 翻譯
P1868 饑餓的奶牛
題目描述
有一條奶牛沖出了圍欄,來到了一處聖地(對於奶牛來說),上面用牛語寫著一段文字。
現用漢語翻譯為:
有N個區間,每個區間x,y表示提供的x~y共y-x+1堆優質牧草。你可以選擇任意區間但不能有重復的部分。
對於奶牛來說,自然是吃的越多越好,然而奶牛智商有限,現在請你幫助他。
輸入輸出格式
輸入格式:
第一行,N,如題
接下來N行,每行一個數x,y,如題
輸出格式:
一個數,最多的區間數
輸入輸出樣例
輸入樣例#1:3 1 3 7 8 3 4輸出樣例#1:
5
說明
1<=n<=150000
0<=x<=y<=3000000
我太菜了......難受
第一遍寫了個zz的貪心,剛寫完就發現錯誤了
第二遍二維動歸,迷之錯誤,現在我仍然不知道為什麽二維是錯的
第三遍改邪歸正,老老實實地瞎寫......
記錄幾句毒雞湯:
1.別學了,退役吧
2.高考都這麽菜,退役吧
3.下學期就省賽了,你連這水題都不會做,退役吧
4.待更新......
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int n,ans;7 struct data{ 8 int x,y,len; 9 }node[2000010]; 10 int f[4000010]; 11 bool cmp(const data&aa,const data&bb){ 12 return aa.y<bb.y; 13 } 14 int main(){ 15 scanf("%d",&n); 16 for(int i=1;i<=n;i++){ 17 scanf("%d%d",&node[i].x,&node[i].y); 18 node[i].len=node[i].y-node[i].x+1; 19 } 20 sort(node+1,node+n+1,cmp); 21 for(int i=1;i<=n;i++){ 22 for(int j=node[i].y-1;j>=0;j--){ 23 if(f[j]) break; 24 f[j]=ans; 25 } 26 f[node[i].y]=max(f[node[i].x-1]+node[i].len,ans); 27 ans=max(f[node[i].y],ans); 28 } 29 printf("%d",ans); 30 return 0; 31 }
動態規劃 洛谷P1868 饑餓的奶牛