zoukankan      html  css  js  c++  java
  • [bzoj2748][HAOI2012]音量调节_动态规划_背包dp

    音量调节 bzoj-2748 HAOI-2012

    题目大意:有一个初值,给你n个$delta$值,求最后不超过给定的限制的情况下的改变的最大值。每个$delta$值可以+也可以-。

    注释:$1le nle 50$,$1le 限制le 1000$。

    想法:正负背包。在背包的之后更新用两行更新,保证每一个$delta$值都被计入了答案。

    最后,附上丑陋的代码... ...

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    int c[1001];
    bool v[51][1001];
    int main()
    {
        int n,beginsound,maxsound;
        scanf("%d%d%d",&n,&beginsound,&maxsound);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&c[i]);
        }
        v[0][beginsound]=1;
        for(int i=1;i<=n;i++)
            for(int j=0;j<=maxsound;j++)
            {
                if(j+c[i]<=maxsound)
                {
                    if(v[i-1][j+c[i]])
                        v[i][j]=1;
                }
                if(j-c[i]>=0) 
                {
                    if(v[i-1][j-c[i]])
                        v[i][j]=1;
                }
            }
        for(int i=maxsound;i>=0;i--)
        {
            if(v[n][i])
            {
                printf("%d",i);
                return 0;
            }
        }
        printf("-1");
        return 0;
    }
    

    小结:我们通常解题不过是将未知转化成已知,或者探索未知而已。而这道题包括大部分的题都是前者。

  • 相关阅读:
    动画,缩放
    本地公司
    调研 公司信息
    外贸 内贸 经商
    情感 爱情 恋爱
    H5源码
    世界 生活
    标识
    Jackson
    java数据结构
  • 原文地址:https://www.cnblogs.com/ShuraK/p/9249896.html
Copyright © 2011-2022 走看看