帮忙看看,刚学记忆化搜索
查看原帖
帮忙看看,刚学记忆化搜索
170399
xuwenxiang666楼主2020/8/12 10:57

之前直接搜索,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;
}
2020/8/12 10:57
加载中...