二分答案加DP判断
来源:互联网 发布:mui登录模板源码 编辑:程序博客网 时间:2024/05/28 01:36
题意:给定数列{an},任意改动其中至多k项,求相邻两项差的绝对值的最大值的最小值。
思路:二分答案(二分的区间可以优化),对于某一个二分值mid,采用DP检验其可行性。
设dp[i]表示考虑前i个数,且第i个数不变,至少需要改多少个才能使得答案不大于mid。
那么考虑下一个不变的数是a[j],则a[i+1]~a[j-1]这些数可以任意改变,前提是abs(a[i]-a[j])<=(j-i)*mid。
思路:二分答案(二分的区间可以优化),对于某一个二分值mid,采用DP检验其可行性。
设dp[i]表示考虑前i个数,且第i个数不变,至少需要改多少个才能使得答案不大于mid。
那么考虑下一个不变的数是a[j],则a[i+1]~a[j-1]这些数可以任意改变,前提是abs(a[i]-a[j])<=(j-i)*mid。
接下来枚举最后一个不变的数到底是哪个,ans=min(ans,dp[i]+n-i)。只要ans<=k就可行,否则不可行
周赛的题目 mark下
#include<cstdio>#include<cmath>#include<algorithm>#include<ctime>#define maxn 500#define inf 3000#define ll long longusing namespace std;ll n,k;ll a[maxn+5];ll dp[maxn+5];bool check(ll mid) { for(int i=1; i<=n; i++) dp[i]=i-1; for(int i=1; i<=n; i++) { for(int j=i+1; j<=n; j++) { if(abs(a[j]-a[i])<=(j-i)*mid) { dp[j]=min(dp[j],dp[i]+(j-i-1)); } } } ll ans=inf; for(int i=1; i<=n; i++) { ans=min(ans,dp[i]+(n-i)); } return ans<=k;}ll solve() { ll left=-1,right=2000000000; while(left+1<right) { ll mid=(left+right)>>1; if(check(mid)) { right=mid; } else { left=mid; } } return right;}int main() { int T; scanf("%d",&T); for(int kase=1; kase<=T; kase++) { scanf("%lld%lld",&n,&k); for(int i=1; i<=n; i++) { scanf("%lld",&a[i]); } printf("%lld\n",solve()); } return 0;}
0 0
- 二分答案加DP判断
- hdu 3681 二分枚举答案+dp判断答案
- hihoCoder 1301筑地市场 数位dp加二分答案
- hdoj 3586 Information Disturbing(二分答案+树dp判断)
- hdu3586(树形DP+二分答案)
- Topcoder SRM658,DP+二分答案,
- [dp][二分答案]最大正方形
- bzoj4985 评分(二分答案+dp)
- 二分答案加双指针扫描 gym101194D
- UVALive 4625 Garlands(二分答案 + DP)
- UVALive 3608 Period(二分答案+DP)
- [BZOJ1044]HAOI2008木棍分割|DP|二分答案
- so就 (二分答案 dp 贪心)
- 【HDU3586】Information Disturbing-二分答案+树形DP
- CEOI2017 D1T3 mousetrap 树形dp+二分答案
- 道路覆盖 (二分答案+状压DP)
- BZOJ 4985: 评分 二分答案 dp判定
- bzoj 1532 二分答案+最大流判断
- 237. Delete Node in a Linked List
- 工资计算
- 设计模式——模板方法模式
- 续篇-部署动态网页
- 通过作用域链去理解闭包
- 二分答案加DP判断
- 128位循环移位器
- 常用正则表达式
- 100. Same Tree
- Java温故而知新-冒泡法排序
- 关于DEV中的GridControl使用之GridView
- Spring学习(三)
- javaWeb学习_05:js的元素操作
- C++ vector基本操作