#include <cstdio>
int f[110][1100],w[110],v[110],n,m;
int max(int x,int y){
return x>y?x:y;
}
int dfs(int x,int y){
if(x<=0)
return 0;
if(f[x][y])
return f[x][y];
if(y<w[x])
return f[x][y]=dfs(x-1,y);
else
return f[x][y]=max(dfs(x-1,y),dfs(x-1,y-w[x])+v[x]);
}
int main(){
int i,j,k;
scanf("%d%d",&m,&n);
for(i=1;i<=n;i++)
scanf("%d%d",&w[i],&v[i]);
printf("%d",dfs(n,m));
return 0;
}
01背包 记忆化搜索
最新推荐文章于 2023-09-16 20:51:45 发布