你有乙個神奇的揹包,他的容積是m(0第一行 n,m
第二行 n個數字
輸出方案數
3 40 20 20 20
先將一下題意吧:乙個固定容積的揹包,然後給你n個物品,他們各自都有自己的容積,用這些物品去裝揹包,乙個前提條件就是一定要將揹包裝滿,不裝滿肯定不行,裝滿一次計數一次,大概就是這個意思了。
剛剛接觸dfs,知道他的大致意思,名為深度搜尋,實際就是不找到底不罷休。
但這種裝揹包的題目一般都是分三類進行討論:
1.揹包剛好裝滿
2.揹包裝不滿和揹包裝不下物品(這兩類在寫程式的時候放在一起討論)
下面給出大佬們的dfs模板:
void dfs(變數)
if(條件成立)
for(int i=s;i接下來是我寫的**:
/************************
這個是dfs的基礎題,用來入門是比較好的
深度搜尋,遞迴運用,直到能夠剛好裝滿揹包
*************************/
#includeusing namespace std;
int n,m;//n是一共有多少個物品,m表示揹包容量
int a[30];//最多有20個物品,因此定義了長度為30的陣列
int ans=0;//ans用來計數方案的個數
void dfs(int ok,int index)//ok指的是容量,index指的就是下標
if(ok<0||index>n)//當容量不夠或者是所有的東西都已經裝進去以後(也就是說揹包不能夠裝滿)
else//這是揹包還沒裝滿還可以繼續裝的情況 }
int main()
ans=0;
dfs(m,1);//這裡的index就從1開始
printf("%d\n",ans);
}}
這個模板其實背下來也可以的,反正都是用以下的,也不是特別難。 ZCMU 1711 揹包 (dfs演算法入門)
time limit 1 sec memory limit 128 mb submit 182 solved 98 submit status web board 你有乙個神奇的揹包,他的容積是m 0第一行 n,m 第二行 n個數字 輸出方案數 3 40 20 20 20 題目大意 給乙個容量為m的...
zcmu 1261 採藥(01揹包)
time limit 1 sec memory limit 128 mb submit 320 solved 159 submit status web board 辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫師。為此,他想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了乙個難題。...
DFS寫揹包問題
dfs解決揹包問題 include 用深搜寫 using namespace std int weight,maxvalue 0,n 揹包中能放物品的總質量weight,最大價值maxvalue,總的物品數量 int v 30 w 30 物品的數量和價值 void dfs int index,int...