此题在HDUoj上排版混乱,不然不会就这么几个人做了。
题目可以去POJ找,POJ排版正常的,大意就是买股票,有利息,然后这一年结束后本金+利息作为下一年的本金,不用去理会那个卖出去的。
这题数据有点大,不过有一句 The value of a bond is always a multiple of $1 000,每个股票的价格都是1000的倍数。
所以可以先把每个股票的价格都除以1000,总的钱数也除以1000,当然要预先存下来,后面与利息相加要用。
代码
#include<stdio.h>
#include<string.h>
int a[20],b[20],dp[500010];
int Max(int x,int y)
{
return x>y?x:y;
}
int main()
{
int T,n,m,year;
int i,j,k,sum,temp;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&m,&year);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%d",&a[i],&b[i]);
a[i]=a[i]/1000;
}
temp=m/1000;
for(i=1;i<=year;i++)
{
memset(dp,0,sizeof(dp)); //一年算一次,变化的是初始的本金temp
for(j=0;j<n;j++)
{
for(k=a[j];k<=temp;k++)
{
dp[k]=Max(dp[k],dp[k-a[j]]+b[j]);
}
}
m+=dp[temp];
temp=m/1000;
}
printf("%d\n",m);
}
return 0;
}