首页 > 其他分享 >牛客 --- 音量调节(递推dp)

牛客 --- 音量调节(递推dp)

时间:2022-12-23 17:11:50浏览次数:68  
标签:遍历 int bgL --- 牛客 音量 maxL dp

原题链接:https://ac.nowcoder.com/acm/problem/19990

思路:

1)很像电梯问题,升或降对应调高或调低,所以内部每次要考虑两个状态。说到内部,如何结合01背包找最大音量呢?

2)我们知道,01背包经典问题是求背包最大容量,其二维dp包括遍历物品和遍历容量两层for循环,最内层更新最优状态.

3)类比经典问题,这道题我们依旧采用两层for,外层遍历n首歌,内层遍历音量,但是每个音量不再是最大价值问题了,变成当前音量能否被演奏(true或false),结合外层for循环推出的每一个子状态的含义:

dp[i][j] : i首歌能否用j音量演奏

4)最后,稍作判断,得出答案。

 

using namespace std;
const int N = 1010;
int maxL,bgL,n;
int a[60];
int dp[60][N];
// dp(i,j) 第i首歌能否用j音量来演唱  
 
int main()
{
    ios::sync_with_stdio(false);
     
    cin>>n>>bgL>>maxL;
     
    for (int i = 1; i <= n; i++)  {
        cin>>a[i];
    }
     
    dp[0][bgL] = 1; // 初始化
     
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j <= maxL; j++) {
            if (dp[i-1][j] && j+a[i] <= maxL) { // 能够改变的条件
                dp[i][j+a[i]] = 1;
            }
            if (dp[i-1][j] && j-a[i] >= 0) {
                dp[i][j-a[i]] = 1;
            }
        }
    }
     
    int i;
    for (i = maxL; i >= 0; i--) { // 从后往前判断 
        if (dp[n][i]) {
            cout<<i<<endl;
            break;
        }
    }
    if (i < 0) cout<<-1<<endl;   
     
    return 0;
 }

----------------------------------------------------------   分   割   线 ----------------------------------------------------------

小主如果你有更好的思路和方法,请一定来评论区留言,愿相互学习和进步~

标签:遍历,int,bgL,---,牛客,音量,maxL,dp
From: https://www.cnblogs.com/yumomo/p/17001101.html

相关文章

  • 实验3:AWS实验-EC2操作
    云计算技术与应用    石家庄铁道大学信息学院 实验3:AWS实验-EC2操作本次实验属于验证型实验,通过本次实验学生将掌握以下内容:1、EC2免费实例创建方法;2、EC2实例......
  • D3D-GetBackBuffer &GetFrontBufferData 抓屏&D3D抓取GPU数据
    HRESULTGetBackBuffer([in]          UINT              iSwapChain,[in]          UINT              B......
  • ffmpeg默认输出中文为 UTF-8
    在使用ffmpeg进行对音视频文件解码输出信息的时候会出现乱码。从网上找到了说ffmpeg默认格式为utf-8 如果vs工程使用的的Unicode则需要将utf-8转Unicode才能正......
  • ramda- 函数式编程库
    npminstallramdaimport*asRfrom'ramda'R.and(true,true);//=>trueR.and(true,false);//=>falseR.and(false,true);//=>falseR.and(false,false......
  • 深入理解Kafka核心设计-日志存储
    一、文件系统中存储方式1.1树形结构图1.2目录结构【分而治之】一个topic有多个分区,一个分区就是一个Log(文件夹),文件夹命名方式:<topic>-<partition>如创建订单topic:CRE......
  • 实验1:HADOOP实验-HDFS与MAPREDUCE操作
    云计算技术与应用    石家庄铁道大学信息学院 实验1:HADOOP实验-HDFS与MAPREDUCE操作本次实验属于验证型实验,通过本次实验学生将掌握以下内容:1、利用虚拟机搭建集......
  • profession computing--- ethics
    Thevaluesofethicstostudy;     ThedifferencebetweentheempricalandNon-empricalproblem     3keyfortheethics:  Theval......
  • CCS-盒子模型-2022-12-23
    Margin外边距Padding内边距Border边框<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>box</title><style>/*常见操作,初始化*/......
  • 霍尼韦尔PC42D打印机使用DPL打印语言没反应解决方法
    在查看DPL语言文档时将DPL指令发出后打印机只闪灯,不打印内容,猜测是指令问题。之前的打印内容:1publicvoidprintDPL(){2Stringcmd="<STX>L\n"+3......
  • 集成学习--GBDT理论
            ......