很简单的一个背包,题目中已经说了所有债权的价格都是1000的整数倍,那直接把价格和资本都除以1000就行了。因为数据很小,直接每年都重新选一次债权。
我脑子缺氧算的1000000除以1000等于100,wa了三遍才发现错在哪儿了。。。。。
#include<stdio.h>
#include<string.h>
#define N 100005
int dp[N];
int a[15],b[15];
int Max(int x,int y)
{
if(x>y)
return x;
else
return y;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,t,m;
scanf("%d%d",&n,&t);
scanf("%d",&m);
int i,j;
for(i=1;i<=m;i++)
{
scanf("%d%d",&a[i],&b[i]);
a[i]/=1000;
}
int tt;
tt=n;
n/=1000;
while(t--)
{
memset(dp,0,sizeof(dp));
for(i=1;i<=m;i++)
{
for(j=a[i];j<=n;j++)
dp[j]=Max(dp[j],dp[j-a[i]]+b[i]);
}
tt=tt+dp[n];
n=tt/1000;
}
printf("%d\n",tt);
}
return 0;
}