HDU 3496 Watch The Movie

题解:显然的双重背包。

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 3496 Watch The Movie

HDU 3496 Watch The Movie

上一篇:基于Diff机制的多个状态合并


下一篇:一个新码农的心酸泪历