题意:
每次可以两次操作
1:改变一个数
2:删除一个数
注:改变数之后仍然是一个递增的序列,注意a[1]和a[n]不能删除

改变一个数相当于删除一个数,也就是每次我们就是进行一次操作相当于删除两个数

假设 1 2 3:我们将2改变成1就相当于删除这个2
这里可能会问了,我们改变的实际过程中我改变后面的堆积那么多数会不会对之后的操作产生影响?

这是不会的。

因为我们会发现,我们最多进行(n-2)/2上取整次操作就可以将答案变为(a[n]−a[1])2(a[n]-a[1])^{2}(a[n]−a[1])2
我们假设是1 3 4 7 9 10:
删3 将4变为1
删7 将9变为1
最终是1 1 1 10
所以我们最多左(n-1)上取整次操作

所以我们只能在1~(n-1)/2内讨论即可,看是否可以将改变一个数看作删除一个数:
我们可以反着考虑,看是否通过操作能否达到那种删掉数之后的状态

我们可以试试:
我们删除两个数(进行一次操作)看能否1 4 9 10的状态
3变为1,删除7
可以多试几组,对于每一组一定是有相应的操作可以完成的,所以dp一定要有全局意识,等到这个状态完成后再去看怎么形成,而不是去一步一步推状态怎么实现的。

知道这个了,dp就很简单了,dp[i][j]表示在(1,i)中删除了j个数的最大值。
下面是AC代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
#define int long long
int max(int x,int y)
{if(x>y) return x;else return y;
}
const int N=110;
int a[N];
int prefix[N];
int dp[N][N];//dp[i][j][k]表示到i,删除j个,a[1]和a[i]一定不会被删除
int get(int l,int r)
{return (a[r]-a[l])*(a[r]-a[l]);
}
signed main()
{int n;cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int i=2;i<=n-1;i++){prefix[i]=prefix[i-1]+(a[i]-a[i-1])*(a[i]-a[i-1]);}for(int i=1;i<=n;i++){dp[i][0]=prefix[i];}for(int i=1;i<=n;i++)//枚举到的位置{for(int j=1;j<=n-2;j++)//枚举删除的数量{for(int k=max(1,i-j-1);k<=i-1;k++)//枚举上一个未被删的位置{dp[i][j]=max(dp[i][j],dp[k][j-(i-k-1)]+get(i,k));}}}for(int i=1;i<=n;i++){int x=min(2*i,n-2);cout<<dp[n][x]<<endl;}return 0;
}

Non-decreasing Array相关推荐

  1. Array Sharpening CodeForces - 1291B(思维)

    You're given an array a1,-,ana1,-,an of nn non-negative integers. Let's call it sharpened if and onl ...

  2. Codeforces 1291 Round #616 (Div. 2) B

    B. Array Sharpening time limit per test1 second memory limit per test256 megabytes inputstandard inp ...

  3. 我和乘子交替方向法admm_找到最大和交替子序列

    我和乘子交替方向法admm Problem statement: 问题陈述: Given a sequence of numbers, you have to find the maximum sum ...

  4. LeetCode github集合,附CMU大神整理笔记

    Github LeetCode集合 本人所有做过的题目都写在一个java项目中,同步到github中了,算是见证自己的进步.github目前同步的题目是2020-09-17日之后写的题.之前写过的题会 ...

  5. 数据结构实验8:内部排序

    实验8                                                                            姓名: 学号: 班级: 8.1 实验目的 ...

  6. Codeforces Round #616 (Div. 2)(题解)

    写在前面: 疫情严重,希望武汉与中国一起加油. 这次就做出两题,第三题没读完,实在是比较慢. A. Even But Not Even time limit per test1 second memo ...

  7. 老男孩上海校区Python面试题

    python面试题 第一章:python基础 数据类型: 1 字典: 1.1 现有字典 dict={'a':24,'g':52,'i':12,'k':33}请按字典中的 value 值进行排序? 1. ...

  8. C#LeetCode刷题之#896-单调数列(Monotonic Array)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3760 访问. 如果数组是单调递增或单调递减的,那么它是单调的. ...

  9. CF831A-Unimodal Array(单峰阵列)

    A.单峰阵列 Array of integers is unimodal, if: it is strictly increasing in the beginning; after that it ...

  10. LeetCode-Java-896. Monotonic Array

    题目 An array is monotonic if it is either monotone increasing or monotone decreasing.An array A is mo ...

最新文章

  1. 概率论中伯努利分布(bernoulli distribution)介绍及C++11中std::bernoulli_distribution的使用
  2. 设置tomcat远程debug
  3. 不同域名cookie共享_cookie在二级域名间共享完成sso
  4. MySQL分库分表 mycat
  5. 如何垂直居中一个img
  6. leetcode No.21 合并两个有序链表
  7. java复制一个对象_Java中对象的复制
  8. 戴琼海:人工智能的几点思考
  9. SpringBoot配置文件敏感信息加密,springboot配置文件数据库密码加密jasypt
  10. 索引体积_第16期:索引设计(MySQL 的索引结构)
  11. JavaScript中数组去重的几种方法整理
  12. Cocos文档案例游戏设计的梳理与分析
  13. Egg.js -- 及案列介绍
  14. 23.方法重写的本质与虚方法表的使用
  15. java/php/net/python志愿者管理系统程序设计
  16. 如何阅读一本书?阅读的高效方法
  17. GSMA选举新的董事会成员,宣布Orange董事长兼首席执行官Stéphane Richard出任主席
  18. ViewPager、Fragment和TabLayout实现切页效果
  19. android checkbox 文字和图标间距,CheckBox选择框和文字设置间距
  20. 刚学了一个炫酷3D三棱锥立体特效,快来看看

热门文章

  1. 数字化运营管控是如何提升管理透明及效率的!
  2. 高绩效团队-VUCA时代的五个管理策略《三》—创新管理
  3. TypeScript入门与区块链项目实战(TypeScript Quickly)阅读记录
  4. java手风琴代码_JavaScript实现手风琴效果
  5. 连续没有空格英文或数字换行解决方案
  6. 求x的n次方编程_C语言 用递归方法求X的n次方
  7. 360无线wifi路由器连接到服务器,两个360路由器如何并连 两个无线路由器桥接设置方法...
  8. bzoj4399 魔法少女LJJ
  9. ubuntu安装中文拼音输入法,装系统的第一步
  10. OSPF- P2P网络、NBMA网络和P2MP网络