這題用動規想了巨久……結果看了郭神的答案發現是深搜。也是,題面太像乙個揹包問題了,而我一開始還用了貪心……也是智障天下第一。不過貪心肯定是不行的,但是動規我又想不出怎麼做。
描述
忍者道具有很多種,苦無,飛鏢,震爆彈。l君熱衷於收集忍者道具,現在他有n個道具,每個道具的重量分別是c1、c2…cn。現在他想把這n個道具裝到載重量為w的工具包裡,請問他最少需要多少個工具包?
輸入
第一行包含兩個用空格隔開的整數,n和w。
接下來n行每行乙個整數,其中第i+1行的整數表示第i個道具的重量ci。
輸出
輸出乙個整數,最少需要多少個工具包。
樣例輸入
5 199612
1994
1229
樣例輸出
2提示
對於100%的資料,1<=n<=18,1<=ci<=w<=10^8。
具體思路是以物品作為層數,列舉每個物品放在哪個揹包裡。我一開始以為是跟木棍那題一樣列舉每個揹包放哪些物品,結果又卡了。還是太菜。
廢話不說。ac**如下:
#include using namespace std;
const int maxn = 18;
int used[maxn];
int w;
int m, n, ans = (1 << 30);
int item[maxn];
int bag[maxn];
void dfs(int x, int sum)
for (int i = 0; i < sum; ++i)
} bag[sum] -= item[x];
dfs(x + 1, sum + 1);
bag[sum] += item[x];
}int main()
dfs (0, 1);
cout << ans << endl;
return 0;
}
郭神的答案是pascal**(手動黑臉),導致從1計數到從0計數的轉換**現了一系列問題。其實看到答案覺得還是挺簡單的。也許這就是作業與考試的區別吧……作業會告訴你用什麼演算法,想破了腦袋總能想出來的…… 廣度優先搜尋 深度優先搜尋
前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...
廣度優先搜尋,深度優先搜尋
深度優先搜尋 depth first search 簡稱dfs。最直觀的例子就是 走迷宮 廣度優先搜尋 每個頂點都要進出一遍佇列,每個邊也都會被訪問一次,所以 時間複雜度o v e 主要消耗記憶體的是visited prev陣列 queue佇列,所以 空間複雜度o v 深度優先搜尋 每條邊最多會被訪...
深度優先搜尋 廣度優先搜尋
深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 package com.neusoft.data.structure 深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 public class dfsbfs 初始化 邊 mmatrix new int vlen vlen for...