买债券之完全背包

 

#include
#define MAX(X,Y) (X)>(Y)?(X):(Y)

struct Bond
{
 int cost;
 int interest;
};
int nBond;
Bond bonds[11];
int Base;
int dp[45300];

int GetMaximum()
{
 int i,j;
 for( i = 0; i <= Base; i++)
 {
  dp[i] = 0;
 }

 for( i = 0;i < nBond; i++)
 {
  for( j = bonds[i].cost; j <= Base; j++)
  {
   dp[j] = MAX(dp[j], dp[j-bonds[i].cost] + bonds[i].interest);
  }
 }
 return dp[Base];

}
int main()
{
 int nCase, nYears;

 scanf("%d", &nCase);
 while(nCase--)
 {
  scanf("%d%d", &Base, &nYears);
  scanf("%d", &nBond);
  int sum = Base;
  for(int i = 0; i < nBond; i++)
  {
   scanf("%d%d", &bonds[i].cost, &bonds[i].interest);
   bonds[i].cost /= 1000;
  
  }
  for(int i = 0;i < nYears; i++)
  {
   Base = sum / 1000;
   sum += GetMaximum();
  }
  printf("%d\n", sum);
 }
 return 0;
}

你可能感兴趣的:(背包)