問題:
有n件物品,每件重量為w[i],價值為c[i],放進容量為v的揹包中。分析:問:能放進揹包的物品的最大價值?
1.每件物品:選、不選,兩種狀態(迷宮的岔道口)5.兩種轉移狀態2.超過v,邊界(迷宮的死胡同)
3.到達邊界,返回最近的岔道口
4.dfs需要記錄:
dfs(index+1,sumw+w[index],sumc+c[i])6.結束:index增長到n,此時的sumw、sumc為最終的,sumw不超過v就去比較sumc與之前最大的值dfs(index+1,sumw,sumc)
#includeconst int maxn=10010;
int n,v,maxvalue=0;//n代表物品件數,揹包重量v,最大價值maxvalue
int w[maxn],c[maxn];//w[i]是每件物品的重量,c[i]是每件物品的價值
//dfs,index是當前處理的物品編號
//sumw和sunc分別是當前物品的總重量和總價值
void dfs(int index,int sumw,int sumc)
return;
} dfs(index+1,sumw,sumc);//不選第index件物品
dfs(index+1,sumw+w[index],sumc+c[index]);//選第index件物品
} int main()
for(int i=0;idfs(0,0,0);//初始時第0件物品、當前總價值和總重量均為0
printf("%d\n",maxvalue);
return 0;
}
演算法筆記 深度優先搜尋 DFS
深度優先搜尋 depth first search,簡稱深搜 是一種極其常用的演算法,簡單來說,符合以下策略的就可以稱為深度優先搜尋。在圖中行走,沒有走過的點稱為 新點 所有走過的點稱為 舊點 開始時所有的點都是新點,從任意節點1出發,走向任意乙個新節點,同時將新節點標記為舊節點,然後重複此步驟。如...
演算法筆記之深度優先搜尋 DFS
由於各種筆試 面試都有演算法程式設計題,總感覺對於演算法和資料結構比較心虛。最近開始刷一些演算法題,複習一下資料結構以及演算法的相關知識。過程中記錄一下知識點,聊勝於無。兩個問題如下 一共有10塊積木,每個積木上有乙個數字,0 9。搭積木規則 每個積木放到其它兩個積木的上面,並且一定比下面的兩個積木...
深度優先搜尋演算法(DFS)
1.深度優先搜尋屬於圖的遍歷演算法的一種,英文縮寫為dfs即depth first search.其過程簡要來說是對每乙個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次。2.搜尋策略 深度優先遍歷圖的方法是,從圖中某頂點v出發 1 訪問頂點v 2 依次從v的未被訪問的鄰接點出發,對圖進...