hdu1963完全背包
因为是完全背包,所以从cost[i]开始往M走,而01背包则刚好相反
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
int M,i,j,t,money,year,d;
int bag[100010],cost[11],earn[11];
cin>>t;
while(t--)
{
cin>>money>>year>>d;
for(i=1;i<=d;i++)
{
cin>>cost[i]>>earn[i];
cost[i]=cost[i]/1000;
}
memset(bag,0,sizeof(bag));
while(year--)
{
M=money/1000;
for(i=1;i<=d;i++)
{
for(j=cost[i];j<=M;j++)
if(bag[j]<bag[j-cost[i]]+earn[i])
bag[j]=bag[j-cost[i]]+earn[i];
}
money+=bag[M];
}
cout<<money<<endl;
}
}