之前直接搜索,30分,用数组a记录已经搜索过的i和j反而只有20分,帮忙看看哪里出了问题,弱鸡的我才刚刚学习记忆化搜索。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int m,n;
int a[105][105];
int t[105];
int v[105];
int db(int i,int j)
{
if(a[i][j]>=0)return a[i][j];
int res;
if(i==n) res=0;
else if(j<t[i]) res=db(i+1,j);
else res=max( db(i+1,j), db(i+1,j-t[i] )+v[i]);
return a[i][j]=res;
}
int main()
{
memset(a,-1,sizeof(a));
scanf("%d%d",&m,&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&t[i],&v[i]);
}
printf("%d",db(0,m));
return 0;
}