首页 > 其他分享 >函数最值2

函数最值2

时间:2022-12-09 20:44:42浏览次数:30  
标签:题目 函数 int sum 修改 最值 dp 两数

目录

题目描述

对于一个数组 \(A\) 定义 \(F(A)=max{abs(a[i]−a[i+1])};\) 给定一个数组,最多修改其中 \(k\) 个元素,只能把数修改成整数,求 \(F(A)\) 的最小值。

题目分析

这题很容易想到是二分,二分 \(F(A)\)。
check 是用 dp 。

  • 状态
    mid:相邻两数的差不超过 \(mid\)。
    i:表示搜到第 \(i\)。
    j:表示 \(1~i-1\)的一个数。
    dp[i]:表示 \(i\) 不改变的最小修改的元素个数。
  • 初始化
    很容易想到dp[i]=i-1
  • 转移
    如果\(|a[i]-a[j]|\)小于相邻两数的差的最大值*差的数量,
    那就改i~j中间的数使差值平均,
    否则改了也不满足条件。
    所以状态转移方程就是:
if(abs(a[i]-a[j])<=x*(i-j))
    dp[i]=min(dp[i],dp[j]+i-j-1);

要修改的个数就是sum=min(dp[i]+n-i);(假设后面都要改)

题目代码

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int n,k,a[N],dp[N];
bool check(int x)
{
	int sum=n+1;
	for(int i=1;i<=n;i++)
	{
		dp[i]=i-1;
		for(int j=1;j<i;j++)
			if(abs(a[i]-a[j])<=x*(i-j))
				dp[i]=min(dp[i],dp[j]+i-j-1);
		sum=min(sum,dp[i]+n-i);
	}
	return sum<=k;
}
int main()
{
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	int l=0,r=1e9;
	while(l<=r)
	{
		int mid=(l+r)/2;
		if(check(mid))r=mid-1;
		else l=mid+1;
	}
	cout<<l;
	return 0;
}

标签:题目,函数,int,sum,修改,最值,dp,两数
From: https://www.cnblogs.com/gdfzlcx/p/16969965.html

相关文章

  • 函数调用--传值调用和传址调用
    intget_max(intx,inty)//返回整型用int,x和y是形式参数。{ return(x>y)?(x):(y);}//voidswap1(int*x,int*y)voidswap2(int&x,int&y){inttmp=0;tmp=......
  • Postman(六): postman定义公共函数
    postman定义公共函数在postman中,如下面的代码:1、返回元素是否与预期值一致varassertEqual=(name,actual,expected)=>{tests[`${name}:实际结果:${actual},期望结果:${expect......
  • JavaScript:立即执行函数
    想象一下,如果我希望某个代码块,只执行一次,就不再执行,应该怎么办?代码块肯定是用函数来表示,执行肯定是调用函数,但是确保只执行一次,该怎么办?我们为什么可以多次调用函数,因为......
  • Excel中的RIGHT函数
    问题:从数据库中导出35800个用户code(属于179家单位,每个单位200个用户),用户code共16位,前14位带有用户属性(如:角色、单位、部门等),后四位为每个单位用户的递增自然数。想要对全......
  • DAX:LOOKUPVALUE 函数
    LOOKUPVALUE函数用于根据一个或多个搜索条件,从一个表中获取一个或0个值。LOOKUPVALUE运行在行上下文中,不需要两个表之间存在关系,搜索结果也不受过滤条件的影响。当两个表之......
  • JavaScript:箭头函数:省略写法
    之所以把箭头函数拎出来,是因为它不仅仅是声明函数的一种方式,它还是函数式编程的重要根基,它使得函数的使用更加的灵活,同时,它的语法,也相对于function声明的函数更加灵活和复......
  • JavaScript:箭头函数:作为参数进行传参
    之前已经说过,JS的函数,也是对象,而函数名是一个变量,是可以进行传参的,也即函数是可以被传参的。只要是函数,都可以被传参,但是箭头函数的语法更为灵活,所以更方便进行传参。如......
  • JavaScript:函数: 如何声明和调用函数?
    首先,理解什么是函数?通俗的说,函数就是用大括号括起来的一组JS语句的集合体,是一个代码块,表达一种行为逻辑。当我们调用函数的时候,我们就是在执行这一组JS语句。然后,确定一......
  • Bash劫持cd命令专用函数_hook-cd,提供交互式选择快速切换到子目录
    Bash劫持cd命令专用函数,提供交互式选择输入序号即可快速cd切换到子目录使用方法:将以下函数代码加入个人配置文件(~/.bash_profile或~/.bashrc)即可,输入cd命令直接回车,即出......
  • Oracle的LAST_DAY函数
    原文地址:https://blog.csdn.net/WuLex/article/details/80855523Oracle中last_day()函数的用法last_day(time):返回指定日期所在月份的最后一天;查询当前月份的最后一天:......