題目:點此

思路:{
利用單調遞減堆疊,每壓一個元素,彈出的元素都向它發射過能量,彈完后的堆疊頂接受過它的能量,
把每個元素收集的能量統計起來,找最大值輸出,
}
犯的錯誤:{
1.偷懶搞檔案輸入輸出后沒去掉,
2.一些型別用錯了(應long long用int),
3.沒考慮堆疊空的情況,
}
識訓:{
1.為避免錯,整數用long long,小數用double,
2.要考慮周全,不要想當然,
3.不是CSP-J/S考試,不要用檔案輸入輸出,
}
1 //#include <iostream> 2 #include <stack> 3 #include <cstdio> 4 #include <vector> 5 using namespace std; 6 stack <int> number; 7 vector <int> v,h; 8 vector <long long> vs; 9 int main(){ 10 int n; 11 // freopen("13.txt","r",stdin); 12 scanf("%d",&n); 13 for(int i=0;i<n;i++){ 14 long long sum=0; 15 int hi,vi; 16 scanf("%d %d",&hi,&vi); 17 h.push_back(hi); 18 v.push_back(vi); 19 while(!number.empty()&&h[number.top()]<hi){ 20 sum+=v[number.top()]; 21 number.pop(); 22 } 23 if(!number.empty()){ 24 vs[number.top()]+=vi; 25 } 26 number.push(i); 27 vs.push_back(sum); 28 } 29 long long m=0; 30 for(int i=0;i<n;i++){ 31 if(m<vs[i]){ 32 m=vs[i]; 33 } 34 } 35 printf("%lld",m); 36 //fclose(stdin); 37 return 0; 38 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/73342.html
標籤:C++
上一篇:條款03:盡可能使用const
