Jin Ge Jin Qu hao(dp)

题目:https://vjudge.net/contest/240161#problem/G

01背包问题;

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
int T;

int n,mt;
int len[55];
int main()
{
    //f[j]到时间j为止,背包中可以装的东西数/
    scanf("%d",&T);
    int Case=0;
    while(T--)
    {
        scanf("%d%d",&n,&mt);
        for(int i=1;i<=n;i++)
            scanf("%d",&len[i]);
        int f[10000];
        memset(f,-1,sizeof(f));
        f[0]=0;
        for(int i=1;i<=n;i++)
            for(int j=mt-1;j>=len[i];j--)
            f[j]=max(f[j],f[j-len[i]]+1);//就地滚动
            int ans=0;
            int pos=-1;
            for(int i=mt-1;i>=0;i--)
                if(pos<f[i])
            {
                pos=f[i];
                ans=i;
            }
            printf("Case %d: %d %d\n",++Case,pos+1,ans+678);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/guagua_de_xiaohai/article/details/81169154