HDU2159 FATE

#include<stdio.h>

#include<string.h>

int d[101][101];

int main()

{

    int i,j,t,flag,v,w,n,m,k,s;

    while(~scanf("%d%d%d%d",&n,&m,&k,&s)){

        memset(d,0,sizeof(d));

        for(flag=i=0;i<k;++i){

            scanf("%d%d",&v,&w);

            for(j=w;j<=m;++j)

                for(t=1;t<=s;++t)

                    d[j][t]>?=d[j-w][t-1]+v;

        }

        for(flag=i=0;i<=m;++i)

            if(d[i][s]>=n){

                flag=1;

                break;

            }

        if(flag) printf("%d\n",m-i);

        else puts("-1");

    }

    return 0;

}

二维背包问题,把打怪物数量的限制也算上一维,就成了典型的二维背包问题!!

你可能感兴趣的:(HDU)