Codeforces Round #210 (Div. 1)——Levko and Array

题目链接

  • 题意:

    n、k,表示n个点,每个点有一个值,记c = max(abs(n[i] - n[i + 1])),要求只能将数组中的至多k个元素值改变(变成任意值),求c的最小值

  • 分析:

    可以二分一下c的值,求当前数组是否能改变至多k个数切c小于二分值。判断的话可以采用DP,dp[i]表示n[i]不改变时候,满足c <= 二分值时候需要改变的数字个数。

  • 注意:

    DP的时候,dp[i] -> dp[j]时候,如果可以转移,那么直接dp[j] = min(dp[j], dp[i] + j - i + 1),也就是说认为i到j之间的元素都进行了改变。这个正确性可以这样解释:如果中间有一个元素刚好不需要改变,那么在DPi转移到这个元素然后再转移到j的时候,答案比直接从i再到j要优,所以这样转移是正确的。

const int maxn = 2100;

int ipt[maxn], dp[maxn];
int n, k;

int check(LL Max)
{
    REP(i, n) dp[i] = i;
    REP(i, n) REP(j, i)
        if (abs(ipt[j] - ipt[i]) <= Max * (i - j))
            dp[i] = min(dp[i], dp[j] + i - j - 1);
    REP(i, n)
        if (dp[i] + n - i - 1 <= k)
            return true;
    return false;
}

int main()
{
    while (~RII(n, k))
    {
        REP(i, n)
            RI(ipt[i]);
        LL l = 0, r = 2e9, m;
        while (l <= r)
        {
            m = (l + r) >> 1;
            if (check(m))
                r = m - 1;
            else
                l = m + 1;
        }
        cout << l << endl;
    }
    return 0;
}
时间: 2024-10-13 03:44:24

Codeforces Round #210 (Div. 1)——Levko and Array的相关文章

CodeForces 360E Levko and Game(Codeforces Round #210 (Div. 1))

题意:有一些无向边m条权值是给定的k条权值在[l,r]区间可以由你来定,一个点s1 出发一个从s2出发  问s1 出发的能不能先打到f 思路:最短路. 首先检测能不能赢 在更新的时候  如果对于一条边 a->b  如果dis1[a] <dis2[a]  那么选择这条边就选择   l  因为这条边对于s1有利 如果两个起点都选择了这条边  则说明s1 赢定了,所以要让他们尽量走这条,所以边权越小越好.跑完之后检测 如果  dis1[f]<dis2[f] 那么 就赢了. 接下来判断能不能平局

CodeForces Round #521 (Div.3) C. Good Array

http://codeforces.com/contest/1077/problem/C Let's call an array good if there is an element in the array that equals to the sum of all other elements. For example, the array a=[1,3,3,7]a=[1,3,3,7] is good because there is the element a4=7a4=7 which

Codeforces Round #275 Div.1 B Interesting Array --线段树

题意: 构造一个序列,满足m个形如:[l,r,c] 的条件. [l,r,c]表示[l,r]中的元素按位与(&)的和为c. 解法: 线段树维护,sum[rt]表示要满足到现在为止的条件时该子树的按位与和至少为多少. 更新时,如果val的pos位为1,那么整个区间的按位与和pos位也应该为1,否则与出来就不对了.(这是本题解题的核心) 那么此时更新 sum[rt] |= val 即可.然后再check一遍看是否满足所有条件即可. 代码: #include <iostream> #inclu

Codeforces Round #258 (Div. 2) B. Sort the Array(简单题)

题目链接:http://codeforces.com/contest/451/problem/B ---------------------------------------------------------------------------------------------------------------------------------------------------------- 欢迎光临天资小屋:http://user.qzone.qq.com/593830943/ma

Codeforces Round #251 (Div. 2) C. Devu and Partitioning of the Array

注意p的边界情况,p为0,或者 p为k 奇数+偶数 = 奇数 奇数+奇数 = 偶数 #include <iostream> #include <vector> #include <set> #include <algorithm> #include <cmath> using namespace std; int main(){ int n,k,p; long a; cin >> n >> k >> p; ve

Codeforces Round #315 (Div. 1)

A. Primes or Palindromes? time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Rikhail Mubinchik believes that the current definition of prime numbers is obsolete as they are too complex and un

Codeforces Round #279 (Div. 2) ABCD

Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name     A Team Olympiad standard input/output 1 s, 256 MB  x2377 B Queue standard input/output 2 s, 256 MB  x1250 C Hacking Cypher standard input/output 1 s, 256 MB  x740 D Chocolate standard input/

Codeforces Round #354 (Div. 2) ABCD

Codeforces Round #354 (Div. 2) Problems # Name     A Nicholas and Permutation standard input/output 1 s, 256 MB    x3384 B Pyramid of Glasses standard input/output 1 s, 256 MB    x1462 C Vasya and String standard input/output 1 s, 256 MB    x1393 D T

Codeforces Round 239 Div 1

都怪自己太懒了 这段时间比赛参加了大部分,但是一直都没写题解,趁这几天没事,计划把这段时间的题解都补上. 上一次比赛(248)终于升到了div1,所以从这次开始就开始写div1了. A. Triangle There is a right triangle with legs of length a and b. Your task is to determine whether it is possible to locate the triangle on the plane in such