CF360B题解
简述题意
定一个数列 ,可以对其中的元素做至多 次修改,每次修改可以将数列中的一个数改成另一个。
求经过修改后,
思路
考虑二分答案,对于 check 函数,我们可以利用 dp 进行求解。
由于修改不太好想,我们可以把问题转换为让不被修改的数最多。容易发现,如果有 3个数都需要修改,当 有值可以使得这两个差都满足条件,我们就可以稍改一个,即条件为
Code
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k;
int a[2005];
int dp[2005];
bool check(int x)
{
for(int i=1;i<=n;i++)
{
dp[i]=1;
for(int j=1;j<i;j++)
if(abs(a[i]-a[j])<=x*(i-j))
dp[i]=max(dp[i],dp[j]+1);
if(dp[i]>=n-k) return true;
}
return false;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>a[i];
int l=-1,r=2e9;//不知道为什么,l设为0或其他数都过不了,只有设为-1才能过
while(l+1<r)
{
int mid=(l+r)>>1;
if(check(mid))r=mid;
else l=mid;
}
cout<<r;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗