#include<iostream>
using namespace std;
int f[110][1100],w[110],v[110],n,m;
int dfs(int x,int y){
if(x<=0)return 0;
if(f[x][y]>0)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;
cin>>m>>n;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
f[i][j]=-1;
for(i=1;i<=n;i++)
cin>>w[i]>>v[i];
cout<<dfs(n,m)<<endl;
return 0;
}
01背包 记忆化搜索
最新推荐文章于 2022-02-14 23:25:46 发布