Poj百练 2711:合唱队形 (分类:动态规划)
发布日期:2021-06-29 15:52:10 浏览次数:3 分类:技术文章

本文共 837 字,大约阅读时间需要 2 分钟。

//合唱队形#include 
#include
using namespace std;int N;int main(){ scanf("%d",&N); int h[N+5]; for(int i = 1; i<= N; i++) scanf("%d",&h[i]); //先从左到右求最长上升子序列 int dp1[N+5] = {0, 1}; for(int i = 2; i<= N; i++){ int tmp = 0; for(int j = 1; j < i; j++) if(dp1[j] > tmp && h[i] > h[j]) tmp = dp1[j]; dp1[i] = tmp + 1; } //再从右到左求最长上升子序列 int dp2[N+5]; dp2[N] = 1; for(int i = N-1; i >= 1; i--){ int tmp = 0; for(int j = N; j > i; j--) if(dp2[j] > tmp && h[i] > h[j]) tmp = dp2[j]; dp2[i] = tmp + 1; } //找出dp1和dp2的最大和 int sum = 0, ans; for(int i = 1; i <= N; i++){ if(dp1[i] + dp2[i] > sum) sum = dp1[i] + dp2[i]; } ans = N-sum; printf("%d",ans+1); return 0;}

转载地址:https://suprit.blog.csdn.net/article/details/81436730 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:SpringBoot自定义banner
下一篇:前后分但文件上传与多文件上传,前端实现

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年05月01日 06时38分22秒