涉及到动态规划,以及没听说过的memset,用于赋值还是很有帮助的
记录一下
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
int M,N;
int dp[1001][1001];
int weight[1001];
int value[1001];
void input()
{
cin>>M>>N;
memset(dp,-1,sizeof(dp));
for(int i=0;i<N;i++)
{
cin>>weight[i]>>value[i];
}
}
int rec(int i,int j)
{
if(dp[i][j]>=0)
{
return dp[i][j];
}
int res;
if(i==N)
{
res=0;
}
else if(j<weight[i])
{
res=rec(i+1,j);
}
else
{
res=max(rec(i+1,j),rec(i+1,j-weight[i])+value[i]);
}
return dp[i][j]=res;
}
int main()
{
input();
cout<<rec(0,M)<<endl;
}