0-1揹包問題(dfs記憶化搜尋寫法)
阿新 • • 發佈:2018-12-23
#include <cstdio> #include <iostream> #include <cstring> using namespace std; int n,v; int p[51], w[51], dp[51][51]; int dfs(int i, int v) { if(dp[i][v]!=0) return dp[i][v]; if(i==0||v<=0) return 0; if(w[i]>v) dp[i][v] = dfs(i-1,v); else dp[i][v] = max(dfs(i-1,v), dfs(i-1,v-w[i])+p[i]); return dp[i][v]; } int main() { while(scanf("%d%d",&n,&v)!=EOF) { memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++) cin>>p[i]; for(int i=0;i<n;i++) cin>>w[i]; cout<<dfs(n,v)<<endl; } return 0; }