難度:普及+/提高
題目型別:貪心/模擬
提交次數:3
涉及知識:貪心/bfs/字串/優先佇列
描述:乙個集合有如下元素:1是集合元素;若p是集合的元素,則2 * p +1,4*p+5也是集合的元素,
取出此集合中最小的k個元素,按從小到大的順序組合成乙個多位數,現要求從中刪除m個數字上的數字,
使得剩下的數字最大,程式設計輸出刪除前和刪除後的多位數字。
注:不存在所有數被刪除的情況
**:
1 #include2 #include3 #include4 #include5using
namespace
std;
6int a[30010];7
char c[10000];8
strings;9
priority_queue, greater> q;10
intmain()
22for(i = 0; i < k; i++)
27 cout28//
——————————————————————————————————————
29int n = 0
;30 i = 0;31
while(n1)38
}39for(i = 0; i < m-n; i++)
40 s.erase(s.length()-1, 1
);41
for(i = 0; i < s.length(); i++)46}
47if(i==s.length())cout<<'0'
;48return0;
49 }
備註:
過了這道題還是蠻有成就感的。一共分3個重要步驟,一是bfs拓展,二是陣列轉為字串,三是貪心解決刪數問題。看了題解才想到bfs和優先佇列,不過想想也挺顯然,跟奶牛那道題差不多。第二個步驟費了些周折,已標出,機智地用了sprintf,一定要加標頭檔案!!!就因為這個,明明我編譯可以過,提交就會編譯報錯!另外我發現srting可以直接和char陣列或者單個字元相加,這就很方便了(不過老師不建議這麼用,那就先把char陣列轉成string就好了,導一下的事)。第三部分跟刪數問題一樣,只不過變成了最大值,所以是找公升序。
裝載問題加強版
1328.裝載問題加強版 時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述現在碼頭有一批重量不同的貨物,有三艘裝載量不同的貨船,試求出能否一次將貨物裝完 輸入第一行給出貨物的數量n n 10 第二行有n個整數,分別表示這n個貨物的重量 第三行有3個整數,分別表示三艘貨船的載重...
方格取數加強版
給出乙個n n的矩陣,每一格有乙個非負整數aij,aij 1000 現在從 1,1 出發,可以往右或者往下走,最後到達 n,n 每達到一格,把該格仔的數取出來,該格仔的數就變成0,這樣一共走k次,現在要求k次所達到的方格的數的和最大 輸入格式 第一行兩個數n,k 1 n 50,0 k 10 接下來n...
題解 烷基計數 加強版 加強版
題目傳送門 問樹大小為 n 每個節點的兒子個數 le 3 的本質不同樹的個數。不考慮兒子之間的順序。n le10 5 因為這個題跟多項式關係比較大,所以就沒有放到 polya 定理學習筆記裡面。我們可以看出,假設我們設 f x 表示答案的普通型生成函式,那麼,我們就有 f x x frac 1 個人...