ZCMU1711揹包(dfs入門題)

2021-08-21 18:03:59 字數 982 閱讀 3034

你有乙個神奇的揹包,他的容積是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...