HDU 2159 FATE

 

http://acm.hdu.edu.cn/showproblem.php?pid=2159

二维费用的背包

wa了好多次,要求最大忍耐度,开始没处理好,想当然了

View Code
#include <iostream>

using namespace std ;

int dp[101][101] ;

int w[101],c[101] ;

int main()

{

    int n,m,k,s ;

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

    {

        for(int i=0;i<k;i++)

            scanf("%d%d",&w[i],&c[i]) ;

        memset(dp,0,sizeof(dp)) ;

        int flag=0 ;

        int cnt=INT_MAX ;

        for(int i=0;i<k;i++)

            for(int j=c[i];j<=m;j++)

                for(int k=1;k<=s;k++)

                {

                    dp[j][k]=max(dp[j][k],dp[j-c[i]][k-1]+w[i]) ;

                    if(dp[j][k]>=n)

                    {

                        if(cnt>j)

                        {

                            flag=1 ;

                            cnt=j ;

                        }

                    }

                }

        if(flag)

            printf("%d\n",m-cnt) ;

        else

            puts("-1") ;

    }

    return 0 ;

}

 

你可能感兴趣的:(HDU)