入门01背包。滚动数组。
注意用用长整型。
#include<iostream>
using namespace std;
const int MAXN=30;
struct Node
{
int v;
int p;
};
long long int mymax(long long int a,long long int b)
{
if(a>b)
{
return a;
}
else
{
return b;
}
}
int main()
{
int n,m;
Node a[MAXN];
long long int dp[30005]={0};
cin>>n>>m;
for(int i=0;i<m;i++)
{
cin>>a[i].v>>a[i].p;
}
for(int i=0;i<m;i++)
{
for(int j=n;j>=a[i].v;j--)
{
dp[j]=mymax(dp[j],(dp[j-(a[i].v)]+((a[i].v)*(a[i].p))));
}
}
cout<<dp[n]<<endl;
return 0;
}