#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;
}
0-1背包问题(dfs记忆化搜索写法)
最新推荐文章于 2024-07-09 16:07:52 发布