HDU 3496 Watch The Movie 二维背包

来源:互联网 发布:sql true false 0 1 编辑:程序博客网 时间:2024/04/30 02:26
#include<stdio.h> #include<string.h> struct node{int v,t;}a[333];int Max(int a,int b) {     return a>b?a:b; } int main(){int n,t,dp[144][1111],i,j,k,m,time;scanf("%d",&t);while(t--){scanf("%d%d%d",&n,&m,&time);for(i=0;i<n;i++)scanf("%d%d",&a[i].t,&a[i].v);memset(dp,-1,sizeof(dp));//因为要拿满m个所以需要初始化-1 dp[0]初始化0;   memset(dp[0],0,sizeof(dp));    //  因为不需要看满time 时间 所以把dp[0]初始化为0;    for(i=0;i<n;i++){for(j=m;j>=1;j--){for(k=time;k>=a[i].t;k--){                    if(dp[j-1][k-a[i].t]==-1)  break; dp[j][k]=Max(dp[j][k],dp[j-1][k-a[i].t]+a[i].v);}}}if(dp[m][time]==-1)printf("0\n");else printf("%d\n",dp[m][time]);}return 0;}

0 0