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;
}

 

posted @ 2014-02-07 10:16  forever97  阅读(112)  评论(0编辑  收藏  举报