演算法學習之路|結繩
給定一段一段的繩子,你需要把它們串成一條繩。每次串連的時候,是把兩段繩子對摺,再如下圖所示套接在一起。這樣得到的繩子又被當成是另一段繩子,可以再次對摺去跟另一段繩子串連。每次串連後,原來兩段繩子的長度就會減半。
給定N段繩子的長度,你需要找出它們能串成的繩子的最大長度。
輸入格式:
每個輸入包含1個測試用例。每個測試用例第1行給出正整數N (2 <= N <= 104);第2行給出N個正整數,即原始繩段的長度,數字間以空格分隔。所有整數都不超過104。
輸出格式:
在一行中輸出能夠串成的繩子的最大長度。結果向下取整,即取為不超過最大長度的最近整數。
輸入樣例:
8
10 15 12 3 4 13 1 15
輸出樣例:
14
我的思路:
利用multiset優先選取較大的對摺,再小的。
直到對摺結束為止。
推薦使用動態規劃的方法,更精確。
以下屬於第一種方法(最後幾個沒AC):
#include<cstdio>
#include<set>
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
multiset<double> v;
double tmp;
for(int i=0;i<n;i++){
cin>>tmp;
v.insert(tmp);
}
double a,b;
while(v.size()!=1){
a=*v.begin();
v.erase(v.begin());
b=*(v.begin());
v.erase(v.begin());
v.insert((a+b)/2);
}
printf("%.0f",*v.begin());
}
相關文章
- 演算法學習之路|連結串列元素分類演算法
- 演算法學習之路|划拳演算法
- 演算法學習之路|A除以B演算法
- 演算法學習之路|列印排名演算法
- 演算法學習之路|方格分割演算法
- 演算法學習之路|朋友數演算法
- 演算法學習之路|SpellItRight演算法
- 演算法學習之路|歐幾里得遊戲演算法遊戲
- 演算法學習之路|月餅演算法
- 演算法學習之路|PATRanking演算法
- 演算法學習之路|列印沙漏演算法
- 演算法學習之路|快速排序演算法排序
- 演算法學習之路|數零壹演算法
- 演算法學習之路|開學寄語演算法
- 軟體學習之路總結
- 演算法學習之路|說反話演算法
- 演算法學習之路|幼兒園買玩具演算法
- 演算法學習之路|小賭怡情演算法
- 演算法學習之路|影像過濾演算法
- 演算法學習之路|日期問題演算法
- 演算法學習之路|賣個萌演算法
- 演算法學習之路|螺旋矩陣演算法矩陣
- 演算法學習之路|選擇題演算法
- 演算法學習之路|字元統計演算法字元
- 演算法學習之路|科學計數法演算法
- 演算法學習之路|PlayOnWords(尤拉道路+dfs)演算法
- 演算法學習之路|舊鍵盤打字演算法
- 演算法學習之路|最簡分數演算法
- 演算法學習之路|檢驗身份證演算法
- 演算法學習之路|愛丁頓數演算法
- golang 學習之路之 struct 結構體GolangStruct結構體
- Linux爬坑之路(學習總結)Linux
- 演算法學習之路|最小生成樹——prime演算法演算法
- 強化學習之路一 QLearning 演算法強化學習演算法
- 演算法學習之路|個位數統計演算法
- 演算法學習之路|狀態壓縮dp演算法
- 演算法學習之路|棋盤問題(博弈)演算法
- 演算法學習之路|進位制轉換演算法