zoukankan      html  css  js  c++  java
  • 变音量

    [问题描述]
    你将要在元旦演奏一场吉他专场。但你不希望声音平淡,所以你希望每个曲之间都有变化。现在你已经确定了每个曲可以与上一个曲之间的音量的变化量,即每首曲开始,你可以对音量选择增加或减少一个指定的变化值。当然音量不可能为负数,也不能太高,因此必需保证每首曲音量在0和maxLevel之间(包含)。
    你的任务是,根据已有的开始音量beginLevel 和每首曲之间的变化量,求出最后一首曲的最大可能音量。如果没有方案,输出 -1。
    [输入文件:song.in]
    文件第一行有三个整数,n, beginLevel, maxLevel,分别表示曲目数,开始量,最大限制音量。
    下面有n-1行整数,第i行整数表示第i首曲与第i+1首曲之间的变化量。
    [输入文件:song.in]
    文件只一行一个数,答案。

    [题解]

    判定性DP.

    [代码]

    var
      f:array[0..100,-2000..2000] of boolean;
      n,start,max,i,j,jj:longint;
      a:array[0..100] of longint;
    begin
      assign(input,'song.in');
      assign(output,'song.out');
      reset(input);
      rewrite(output);
      readln(n,start,max);
      for i:=1 to n-1 do
        readln(a[i+1]);
      fillchar(f,sizeof(f),false);
      f[1,start]:=true;
      for i:=2 to n do
        for j:=0 to max do
          begin
            if j-a[i]>=0 then
              f[i,j]:=f[i-1,j-a[i]];
           if j+a[i]<=max then
             f[i,j]:=f[i,j] or f[i-1,j+a[i]];
         end;
      jj:=-1;
      for j:=max downto 0 do
        if f[n,j] then
          begin
            jj:=j;
            break;
          end;
      writeln(jj);
      close(input);
      close(output);
    end.
    
  • 相关阅读:
    idea 2017版破解
    UIRecorder 学习了解
    简单应用单例模式
    线程安全的单例模式(有参and无参)
    批量删除和批量修改(参数使用list)
    简单线程池开启线程
    随机数生成
    网络延迟-tc工具使用简单说明
    c++高级元编程 第一部分,第一节,第一小节
    Writing_Bug_Free_C_Code_Chapter_2_Know_Your_Environment
  • 原文地址:https://www.cnblogs.com/zyx-crying/p/9319549.html
Copyright © 2011-2022 走看看