1 条题解

  • 0
    @ 2025-8-24 21:31:23

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar jackyzhu
    **

    搬运于2025-08-24 21:31:23,当前版本为作者最后更新于2017-12-04 19:29:00,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    到达型的01背包问题

    f[i][j]:前i首歌曲能否达到音量j,f[i][j]=0不能达到,f[i][j]=1表示可以达到

    音量调高表示取第i件物品,音量调低表示不取第i件物品

    音量为背包容量,01背包模板题(调高调低带约束)

    初始条件:f[0][beginlevel]=1,没演奏前可以到达beginlevel

    #include<bits/stdc++.h>
    using namespace std;
    int n,begin,maxlevel;
    int ans;
    int a[51];
    int f[51][1001];
    int main()
    {
        scanf("%d%d%d",&n,&begin,&maxlevel);
        f[0][begin]=1;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
        }
        for(int i=1;i<=n;i++)
            for(int j=maxlevel;j>=0;j--)
            {
                if(j-a[i]>=0)
                    f[i][j]=f[i][j]||f[i-1][j-a[i]];
                if(j+a[i]<=maxlevel)
                    f[i][j]=f[i][j]||f[i-1][j+a[i]];
            }
        for(int i=maxlevel;i>=1;i--)
            if(f[n][i]==1)
            {
                printf("%d",i);
                return 0;
            }
        printf("-1");
        return 0;
    }
    
    
    • 1

    信息

    ID
    846
    时间
    1000ms
    内存
    125MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者