洛谷 P1877 BZOJ 2748 cogs 791 [HAOI2012]音量调节

简介: 题目描述 一个吉他手准备参加一场演出。他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都需要改变一次音量。在演出开始之前,他已经做好一个列表,里面写着每首歌开始之前他想要改变的音量是多少。

 

题目描述

一个吉他手准备参加一场演出。他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都需要改变一次音量。在演出开始之前,他已经做好一个列表,里面写着每首歌开始之前他想要改变的音量是多少。每一次改变音量,他可以选择调高也可以调低。

音量用一个整数描述。输入文件中整数beginLevel,代表吉他刚开始的音量,整数maxLevel,代表吉他的最大音量。音量不能小于0也不能大于maxLevel。输入中还给定了n个整数$c_1,c_2,c_3,...,c_n$,表示在第i首歌开始之前吉他手想要改变的音量是多少。

吉他手想以最大的音量演奏最后一首歌,你的任务是找到这个最大音量是多少。

输入输出格式

输入格式:

 

第一行依次为三个整数n, beginLevel, maxLevel。

第二行依次为n个整数 $c_1,c_2,c_3,...,c_n$。

数据规模:

1<=n<=50, 1<=ci<=maxLevel, 1<=maxLevel<=1000, 0<=beginLevel<=maxLevel

 

输出格式:

输出演奏最后一首歌的最大音量。如果吉他手无法避免音量低于0或者高于maxLevel,输出-1。

 

输入输出样例

输入样例#1:  复制
3 5 10
5 3 7
输出样例#1:  复制
10

吐槽

  这也算省选题……简直了。——hzwer

  然而我思考了两天,我的滚动数组哪里出了问题。最后得出的结论是:滚动数组使用时一定要注意清零,背包问题不用清零是因为没清零的部分影响不了答案。

解题思路

  就是搞一个二维数组,dp[i][j]记录第i首歌是否能为音量j。然后发现状态转移只发生在相邻的两首歌之间,于是可以套上滚动数组,第奇数首歌就在dp[1]里,第偶数首歌就在dp[0]里,判断奇偶就用位运算:$i&1$,和$i%2$作用一样。

源代码

 1 #include<cstdio>
 2 #include<memory.h>
 3 int n,begin,maxv;
 4 int c[1010];
 5 bool dp[52][1010];
 6 
 7 int main()
 8 {
 9     freopen("changingsounds.in","r",stdin);
10     freopen("changingsounds.out","w",stdout);
11     scanf("%d%d%d",&n,&begin,&maxv);
12     dp[0][begin]=1;
13     for(int i=1;i<=n;i++)
14         scanf("%d",c+i);
15     for(int i=1;i<=n;i++)
16     {
17         memset(dp[i&1],0,sizeof(dp[i&1]));
18         for(int j=0;j<=maxv;j++)
19         {
20             if(dp[(i-1)&1][j])
21             {
22                 if(j+c[i]<=maxv) dp[i&1][j+c[i]]=true;
23                 if(j-c[i]>=0) dp[i&1][j-c[i]]=true;
24             }
25         }
26     }
27     for(int i=maxv;i>=0;i--)
28     {
29         if(dp[n&1][i])
30         {
31             printf("%d\n",i);
32             return 0;
33         }
34     }
35     printf("-1\n");
36     return 0;
37 }

 

目录
相关文章
|
11月前
|
编译器 C++ 容器
C++/PTA 气球升起来
程序设计竞赛时,赛场升起各色气球多么激动人心呀!志愿者送气球忙得不亦乐乎,观战的某人想知道目前哪种颜色的气球送出最多。
78 0
洛谷P1877-[HAOI2012]音量调节(二维01背包)
洛谷P1877-[HAOI2012]音量调节(二维01背包)
洛谷P1877-[HAOI2012]音量调节(二维01背包)
洛谷 P2827 BZOJ 4721 UOJ #264 蚯蚓
题目描述 本题中,我们将用符号表示对c向下取整,例如:。 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓。 蛐蛐国里现在共有n只蚯蚓(n为正整数)。
946 0
洛谷 P2486 BZOJ 2243 [SDOI2011]染色
题目描述 给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“112221”由3段组成:“11”、“222”和“1”。
888 0
|
机器学习/深度学习
洛谷 P1129 BZOJ 1059 cogs 660 [ZJOI2007]矩阵游戏
题目描述 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏。矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的)。每次可以对该矩阵进行两种操作: 行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色) 列交换操作:选择矩阵的任意两列,交换这两列(即交换对应格子的颜色) 游戏的目标,即通过若干次操作,使得方阵的主对角线(左上角到右下角的连线)上的格子均为黑色。
917 0
|
人工智能 BI
洛谷 P3183 BZOJ 4562 [HAOI2016]食物链
题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数。物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3......am-1 bm-1am bm其中ai bi表示能量从物种ai流向物种bi,注意单独的一种孤立生物不算一条食物链 输入输出格式 输入格式:   第一行两个整数n和m,接下来m行每行两个整数ai bi描述m条能量流动关系。
1007 0
|
人工智能 算法 测试技术
BZOJ 3670: [Noi2014]动物园【KMP变形 】
3670: [Noi2014]动物园 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2738  Solved: 1475[Submit][Status][Discuss] Description 近日,园长发现动物园中好吃懒做的动物越来越多了。
1322 0
|
算法 vr&ar 人工智能
BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 9894  Solved: 4561[Submit][Status][Discuss] Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。
1543 0

热门文章

最新文章