這道題我是用乙個陣列記錄每個 q (1~q)的最好組成(之後看標準答案,這裡的空間複雜度可以降低的,即記錄「前乙個"是誰和最後增加的那個,可以回溯回去)。然後類似dijkstra(基本就是dijkstra),從當前最好的組成向外擴充套件。擴充套件的時候從當前組成的下乙個沒用的pail開始,每個pail都增加到q為止。這些q都放在乙個priority_queue裡面。 如果出隊的是q,那麼任務就完成了。
注:c++ stl中priority_queue的第三個引數,即比較函式,應該是如果第乙個比第二個大,就返回true.似乎也不存在自己和自己比較的情況(和sort的第三個引數感覺不一樣)。
executing...test 1: test ok [0.005 secs, 3504 kb]
test 2: test ok [0.005 secs, 3504 kb]
test 3: test ok [0.003 secs, 3504 kb]
test 4: test ok [0.005 secs, 3504 kb]
test 5: test ok [0.003 secs, 3504 kb]
test 6: test ok [0.046 secs, 3768 kb]
test 7: test ok [0.065 secs, 3504 kb]
test 8: test ok [0.459 secs, 3768 kb]
test 9: test ok [0.132 secs, 3768 kb]
test 10: test ok [0.594 secs, 3768 kb]
all tests ok.
/* id: thestor1
lang: c++
task: milk4
*/#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
vector> combinations(20000 + 1, vector());
class cmpbycombinations
else if (newcomb.size() > comb.size())
else
else if (newcomb[i] > comb[i])
}return false; }}
int main()
sort(pails.begin(), pails.end());
priority_queue, cmpbycombinations> que;
for (int i = 0; i < pails.size(); ++i)
// cout<<"[debug]"<
USACO Hamming Codes 解題報告
資料小,暴力搜尋可以搞定。但是推薦使用dfs,每個節點 數 有取與不取兩個分支。注意 0是必須出現的。證明如下 最終得到的結果序列中,0是必須出現的,證明如下 如果存在另乙個滿足要求的結果序列s 其最小值為a1 n 0,那麼序列s s n 是滿足條件的最小解,且首元素為0 id xpli1 prog...
USACO Closed Fences 解題報告
幾何題看著就很有畏懼感。這裡用的是最 的演算法,時間複雜度應該在n 2。還沒看別人的解題報告,不過我猜nlogn的解法是有的。比如判斷乙個fence是不是valid的時候,這裡將所有的線段兩兩比較,看是否相交。但是有個叫line sweep的演算法,可以在nlogn的時間複雜度內完成。既然accep...
Wiggle Subsequence解題報告
這道題和最長子序列,divisible subset題目類似,都可以用o n2 的時間複雜度完成。可以想象,對於第i個數,dp i dp j 1,當且僅當dp j 1 dp i 而且nums j 和nums i 的差值和j所處位置的差值符號相反。所以,如下 class solution if dp ...