刚才面试了一个蛮有意思的DP题目,脑子断片,没写出来,不过早上状态还是蛮好的

一个长度为n的序列最多改变k次,使相邻两数之差绝对值的最大值最小

三维的dp我先尝试写一下

Codeforces 360B Levko and Array

其实是n^2logm的,太nb了

去二分答案这个很好想,因为既然这个数满足,大于它肯定满足,然后就是去判断这个数字存不存在了。很容易想到贪心,但是贪心会有个问题,就是你无法确定你要修改的哪个数,很容易你就可以找到自己的bug。最后这个是个dp,dp[i]表示从n到i需要修改的最小的次数

当然是把全部往等差(这个差可以有符号)数列搞,我最初想的是找到平均数,平均数是不可能的,因为有时候改一个会很影响平均数

那就是判断这个数字合不合法,并不需要去判断这个数字需要改成什么,需要改成什么太难想的,因为其实满足的是一个范围

可以倒着来,因为这个满足了,之前的肯定满足。

然后就去找是不是有满足的,满足就是相当于在前一个状态上加上从i到j的差-1,和第一个一样

然后就可以判断了,非常完美的代码,佩服啊

#include <bits/stdc++.h>
using namespace std;
const int N = 2e3 + ;
int n, k, dp[N], a[N]; bool check(int m)
{
for (int i = n; i > ; i--)
{
dp[i] = n - i - ;
for (int j = i + ; j <= n; j++)
{
if (abs(a[j] - a[i]) <= m * 1LL * (j - i))
dp[i] = min(dp[i], dp[j] + j - i - );
}
if (dp[i] + i <= k)
return true;
}
return false;
} int main()
{
cin >> n >> k;
for (int i = ; i <= n; i++)
cin >> a[i];
int l = , r = 2e9;
while (l < r)
{
int m = l + ((r - l) >> );
//cout << l << " " << r << " "<<m<<"\n";
if (check(m))
r = m;
else
l = m + ;
}
cout << r;
return ;
}

最新文章

  1. mac下使用gcc
  2. chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法[bubuko.com]
  3. JavaBean,POJO,VO,DTO的区别和联系
  4. vue data对象添加新属性触发视图
  5. DataTable详解,以及dataview
  6. Creating a Unique File Name
  7. [leetcode]_Same Tree
  8. Spring事务Transaction配置的五种注入方式详解
  9. CSS布局中——导航是非常常见的
  10. 使用ServiceStackRedis链接Redis简介
  11. SQL Server 日志收缩
  12. GCD实现倒计时
  13. kafka简单回顾
  14. Zynq系列程序逻辑固化方法
  15. Directx11代码下载
  16. 51nod1042
  17. java 之DelayQueue,TaskDelayed,handlerFactory,dataChange消息配置.收发等.java spring事务处理TransactionTemplate
  18. redis利用key计时与计数
  19. 清华大学 pip 源
  20. (转)理解YOLOv2训练过程中输出参数含义

热门文章

  1. 使用async读取异步数据
  2. Umount- Linux必学的60个命令
  3. mysqlbinlog: unknown variable &#39;default-character-set=utf8&#39;
  4. Python-购物车系统
  5. 关于Cocos2d-x多线程异步载入资源的问题
  6. idea短信验证
  7. apache支持多主机头,并防止恶意空主机头的配置实现
  8. python-基础-面向对象2-异常-模块工厂模式
  9. T2483 电梯(模拟题)
  10. leetcode 57 Insert Interval &amp; leetcode 1046 Last Stone Weight &amp; leetcode 1047 Remove All Adjacent Duplicates in String &amp; leetcode 56 Merge Interval