求助题解(玄关)
  • 板块灌水区
  • 楼主_WHX985_
  • 当前回复5
  • 已保存回复5
  • 发布时间2025/1/13 08:43
  • 上次更新2025/1/13 14:30:15
查看原帖
求助题解(玄关)
1035401
_WHX985_楼主2025/1/13 08:43

这篇

改了半天结果不过

求大佬

题解原码

[题目传送门](https://www.luogu.com.cn/problem/P1970)
### 前言(无用的废话)
说实话这道题是一道十分简单的 DP,~~虽然我卡在这道题半个小时~~
### 正文
一看见这道题会想到贪心,但~~本蒟蒻~~刚学 DP ,想练练手。

1.分析条件
一看条件 $A$,$B$ 都很长,但我们一步一步翻译会发现
$A$ 的意思就是剩下的花的高度要交替上升和下降,$B$ 的意思就是剩下的花的高度要交替下降和上升。

2.思考转移方程(这是 DP 的关键)
由上面分析看出三条 DP 的转移方程

3.思考特殊样例

当 $n<2$ 即只有一朵花时要特判

$Code$

```cpp
#include<bits/stdc++.h>
using namespace std;
#define WHX985 return
#define code 0
int n,dp[1000005];
int ans=1;
bool flag;//建立开关
int main(){
    cin>>n;
	for(int i=1;i<=n;i++){
		cin>>dp[i];//直接输入(直接在dp数组上动规)
	}
	if(n<2){//特判
		cout<<1;
		return 0;
	} 
    if(dp[2]>=dp[1]){
		flag=1;//设定开关的处值
	}
    for(int i=1;i<=n;i++){
        if(flag==0&&i==n){//讲了的不讲了
			ans++;
			break;
		}
        if(flag==1){
			if(dp[i+1]<dp[i]){
				ans++;
				flag=0;
				continue;
			}
		}
        if(flag==0){
			if(dp[i+1]>dp[i]){
				ans++;
				flag=1;
				continue;
			}
		}
    }
    cout<<ans; 
    WHX985 code;
}

引用了FastIO_DP的内容

感谢

2025/1/13 08:43
加载中...