題意描述:有幾種不同的債券共購(gòu)買,每種債券有相應(yīng)的年效益,這些債券每年可以兌現(xiàn)一次,并且沒(méi)有任何手續(xù)費(fèi),兌現(xiàn)后可以選擇購(gòu)買不同債券。給定初始金額和年限,求出最終的最大收益。
解題思路:每年按01背包問(wèn)題計(jì)算一遍即可。


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN 100000
typedef struct
{
int w;
int i;
}Bonds;
int f[LEN];
Bonds bd[20];
int Max(int a, int b)
{
if(a > b)
return a;
return b;
}
int main()
{
int i, j, k;
int N;
int M, Y;
int d, a, b;
scanf("%d", &N);
while(N--)
{
scanf("%d%d", &M, &Y);
scanf("%d", &d);
for(i = 1; i <= d; i++)
{
scanf("%d%d", &bd[i].w, &bd[i].i);
bd[i].w /= 1000;//債券的面值都是1000的整數(shù)倍
}
int alli = 0;
for(j = 0; j < Y; j++)
{
M += alli;
int P = M / 1000;//債券的面值都是1000的整數(shù)倍
memset(f, 0, sizeof(f));
for(i = 1; i <= d; i++)
for(k = bd[i].w; k <= P; k++)
f[k] = Max(f[k], f[k - bd[i].w] + bd[i].i);
alli = f[P];
}
M += alli;
printf("%d\n", M);
}
//system("pause");
}
posted on 2012-08-14 11:45
小鼠標(biāo) 閱讀(217)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
DP