題目:點此

優先佇列思路:{
先讀入,讀入的資料放入優先佇列,再回圈:{
取出兩個數,把這兩堆果子合并,記錄耗費體力并保存合并后果子的重量,
}
輸出,
}
暴力思路:{
與優先佇列沒什么區別,只是放入優先佇列改成了用插入排序或冒泡排序確定放的位置,
}
犯的錯誤:{
1.函式內要改變的值做引數時應用指標型別,
2.vector::insert的第一個引數應為iterator,而不是int,
3.插入排序讀入回圈沒考慮i=0的情況,
4.優先佇列主回圈結束條件應是佇列只有一個數,而不是佇列空,
}(由于這次錯誤大多沒被記載,犯的錯誤不止這些,敬請諒解,)
識訓:{
1.函式內要改變的值做引數時應用指標型別,
2.vector::insert的第一個引數應為iterator,而不是int,
3.要考慮周全,不要想當然,
}
暴力代碼(50分,冒泡排序):
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 int buble_insert_sort(int insertx,vector<int> *insert_x){ 5 insert_x->insert(insert_x->begin(),insertx); 6 for(int i=0;i<insert_x->size()-1;i++){ 7 if(insert_x->operator[](i)>insert_x->operator[](i+1)){ 8 insert_x->operator[](i)^=insert_x->operator[](i+1); 9 insert_x->operator[](i+1)^=insert_x->operator[](i); 10 insert_x->operator[](i)^=insert_x->operator[](i+1); 11 } 12 } 13 } 14 vector <int> x; 15 int main(){ 16 int n,sum=0; 17 cin >> n; 18 for(int i=0;i<n;i++){ 19 int data; 20 cin >> data; 21 buble_insert_sort(data,&x); 22 } 23 for(int i=0;i<n-1;i++){ 24 int a=x.front(); 25 x.erase(x.begin(),x.begin()+1); 26 int b=x.front(); 27 x.erase(x.begin(),x.begin()+1); 28 sum+=(a+b); 29 buble_insert_sort(a+b,&x); 30 } 31 cout << sum; 32 return 0; 33 }
暴力代碼(10分,剩下的未知原因WA,插入排序):
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 int insert_insert_sort(int insertx,vector<int> *insert_x){ 5 for(int i=0;i>insert_x->size();i++){ 6 if(insert_x->operator[](i)>insertx){ 7 insert_x->insert(insert_x->begin()+i,insertx); 8 return 0; 9 } 10 } 11 insert_x->insert(insert_x->end(),insertx); 12 return 0; 13 } 14 vector <int> x; 15 int main(){ 16 int n,sum=0; 17 cin >> n; 18 for(int i=0;i<n;i++){ 19 int data; 20 cin >> data; 21 if(i==0){ 22 x.push_back(data); 23 continue; 24 } 25 insert_insert_sort(data,&x); 26 } 27 for(int i=0;i<n-1;i++){ 28 int a=x.front(); 29 x.erase(x.begin(),x.begin()+1); 30 int b=x.front(); 31 x.erase(x.begin(),x.begin()+1); 32 sum+=(a+b); 33 insert_insert_sort(a+b,&x); 34 } 35 cout << sum; 36 return 0; 37 }
優先佇列(AC):
1 #include <iostream> 2 #include <queue> 3 using namespace std; 4 priority_queue <int,vector<int>,greater<int> > x; 5 int main(){ 6 int n; 7 cin >> n; 8 int sum=0; 9 for(int i=0;i<n;i++){ 10 int data; 11 cin >> data; 12 x.push(data); 13 } 14 while(x.size()>1){ 15 int a=x.top(); 16 sum+=a; 17 x.pop(); 18 int b=x.top(); 19 sum+=b; 20 x.pop(); 21 x.push(a+b); 22 } 23 cout << sum; 24 return 0; 25 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/69150.html
標籤:C++
上一篇:關于實作虛擬攝像頭
