本来第一次是使用性价比来做的,样例给的几个数据都可以,但是还是判错,以后能够 注意一下。只能中规中矩的用DP了,也可以看做是背包。01背包,套路的问题,但是数据非常的大,也是没办法。背包问题详见背包九讲。
#include<iostream>
#include<cstring>
#define M 30010
#define N 30
using namespace std;
int d[M],a[N],b[N];
int main()
{
int test,m,n,i,j;
cin>>test;
while(test--)
{
cin>>m>>n;
for(i=1;i<=n;i++) cin>>a[i]>>b[i];
memset(d,0,sizeof(d));
for(i=1;i<=n;i++)
{
for(j=m;j>=a[i];j--)
{
d[j]=max(d[j],d[j-a[i]]+a[i]*b[i]);
}
}
cout<<d[m]<<endl;
}
return 0;
}