hdu 3496 二维费用背包(蛋疼)

来源:互联网 发布:combo端口是什么意思 编辑:程序博客网 时间:2024/06/05 15:18

这道题如果没有最后面那个限制条件 “  如果能看完m部电影,就输出最大值,否则输出0  ” 那么这道题就直接套用二维费用背包模板,AC

但是有这个限制条件。。。。

参考了网上众多大神的解题报告,都是初始化dp[][], 这块,也没有说清楚具体原理,

在本题中求最后的结果时 有一维应该是满的,从dp[m][]中去寻找答案。。如果求最大值 那么初始化为负无穷大,如果求最小值,则初始化为正无穷大。

附上代码:

#include<stdio.h>#include<iostream>#include<string.h>const int MAX=2147483648;using namespace std;#define N 1100int dp[N][N];int a[N],b[N];int main(){  int t,n,m,l;  cin>>t;  while(t--)    {     cin>>n>>m>>l;     for(int i=1;i<=n;i++)     scanf("%d%d",&a[i],&b[i]);     for(int i=1;i<=m;i++)        for(int j=0;j<=l;j++)          dp[i][j]=-MAX;     dp[0][0]=0;     for(int i=1;i<=n;i++)        {            for(int j=m;j>=1;j--)            {              for(int c=l;c>=a[i];c--)                  dp[j][c]=max(dp[j][c],dp[j-1][c-a[i]]+b[i]);            }        }       if(dp[m][l]<0)        printf("0\n");       else        printf("%d\n",dp[m][l]);    }    return 0;}


0 0
原创粉丝点击