Luogu P1877 [HAOI2012]音量调节

来源:互联网 发布:北京java 好找工作吗 编辑:程序博客网 时间:2024/06/02 02:20

题目传送门:https://www.luogu.org/problem/show?pid=1877


本题为河南2012的省选的X题(我不知道是T几)。


主要思路:这道题可以写记忆化搜索.
我们可以来看一下,这道题有两种决策:1.提高声音 2.降低声音;
那么我们要求出一种状态时的声音最大值必须要求出做哪种决策解会更大一些.
这么一来,状态转移方程就很好的出来了:
DP[step][level](step是时间,level是现在的声音,high是每场可换的声音)=max(DP[step+1][level-high[step]],DP[step+1][level+high[step]]);
本人比较推荐写记搜,这样的话会比动规好理解一点.


附上代码:

#include <iostream>#define MAXN 100#define UNINF -999999using namespace std;int dp[MAXN][MAXN*MAXN],high[MAXN];int n,startlevel,maxlevel;void init(){int i;cin>>n>>startlevel>>maxlevel;for(i=1;i<=n;i++){cin>>high[i];}return;}int search(int level,int step){if(level<0 || level>maxlevel){return 0;}if(dp[step][level]!=0){return dp[step][level];}if(step==n+1){return level;}dp[step][level]=max(dp[step][level],max(search(level-high[step],step+1),search(level+high[step],step+1)));return dp[step][level];}void out(){if(dp[1][startlevel]==0){cout<<"-1";}else{cout<<dp[1][startlevel];}return;}int main(){init();search(startlevel,1);out();return 0;}

原创粉丝点击