HDU 3496 Watch The Movie

题解:显然的双重背包。

#include <cstdio>

int f[105][1005],v[105],w[105];

int main()

{

    int t,n,m,l;

    scanf("%d",&t);

    while(t--)

    {

        scanf("%d%d%d",&n,&m,&l);

        for(int i=1;i<=n;i++)

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

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

        for(int j=0;j<=l;j++)  

        {  

            if(i==0)f[i][j]=0;  

            else f[i][j]=-987654321;   

        }  

        for(int i=1;i<=n;i++)

         for(int j=m;j>=1;j--)

          for(int k=l;k>=w[i];k--)

            if (f[j-1][k-w[i]]+v[i]>f[j][k]) f[j][k]=f[j-1][k-w[i]]+v[i];

        if (f[m][l]<0)f[m][l]=0;

        printf("%d\n",f[m][l]); 

    }

    return 0;

}

 

你可能感兴趣的:(HDU)