poj 2063 Investment(背包问题)

来源:互联网 发布:快递员端抢件软件 编辑:程序博客网 时间:2024/06/05 06:52

很简单的一个背包,题目中已经说了所有债权的价格都是1000的整数倍,那直接把价格和资本都除以1000就行了。因为数据很小,直接每年都重新选一次债权。

我脑子缺氧算的1000000除以1000等于100,wa了三遍才发现错在哪儿了。。。。。

#include<stdio.h>#include<string.h>#define N 100005int 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;}