首页 > 其他分享 >CSP-S划分 解题报告

CSP-S划分 解题报告

时间:2022-10-26 09:22:51浏览次数:58  
标签:int back 转移 front 划分 解题 qi CSP dp

n <= 10

爆搜即可

n <= 50

什么乱搞

n <= 400

有一个 \(n^3\) 的 dp

设 dp[i][j] 表示最后一段为 j+1~i 时的最小值

直接三层循环转移即可

dp[1][0] = 0;
for(int i = 1;i <= n;i ++)
{
    dp[i][0] = qi[i] * qi[i];
    for(int j = 1;j < i;j ++)
        for(int k = 0;k < j;k ++)
        {
            if(qi[i] - qi[j] >= qi[j] - qi[k]) dp[i][j] = min(dp[i][j], dp[j][k] + (qi[i] - qi[j]) * (qi[i] - qi[j]));
        }
}

这里 qi 数组为前缀和

n <= 5000

通过大胆的打表我们发现,这个玩意在 j 最大,k 最大且合法时取到最小值

然后我们对于每个 j ,在转移时额外把 k 记录到 l 数组中,可以把 k 的循环优化掉,变成 \(n^2\) 。

dp[0] = 0;
for(int i = 1;i <= n;i ++)
{
    for(int j = i - 1;j >= 0;j --)
    {
        if(qi[i] - qi[j] >= qi[j] - qi[l[j]])
        {
            dp[i] = dp[j] + (qi[i] - qi[j]) * (qi[i] - qi[j]);
            l[i] = j;
            break;
        }
    }
}

n <= 500000

把要求的式子变变形,发现:

\(qi[i] >= qi[j] * 2 - qi[l[j]]\)

由于qi[i]一直在增大,所以当新加入的 j 的 \(qi[j] * 2 - qi[l[j]]\) 比之前的要小的话,后面的数只会从 j 转移,不会从之前的数转移。

所以可能被转移的,是一个 \(qi[j] * 2 - qi[l[j]]\) 的序列。

这不一眼单调队列

然后搞成了 \(O(n)\)

dp[0] = 0;
q.push_back(0);
for(int i = 1;i <= n;i ++)
{
    int back = -1;
    while(!q.empty() && qi[i] >= 2 * qi[q.front()] - qi[l[q.front()]]) back = q.front(), q.pop_front();
    if(back != -1) q.push_front(back);
    int j = q.front();
    dp[i] = dp[j] + (qi[i] - qi[j]) * (qi[i] - qi[j]);
    l[i] = j;
    while(!q.empty() && 2 * qi[i] - qi[l[i]] <= 2 * qi[q.back()] - qi[l[q.back()]]) q.pop_back();
    q.push_back(i);
}

算法复杂度已经正确了,但这道题出题人硬是要搞一个高精。如果用__int128转移那么1G空间都不够你用的。

所以就这样吧

标签:int,back,转移,front,划分,解题,qi,CSP,dp
From: https://www.cnblogs.com/closureshop/p/16827120.html

相关文章

  • 第二十七章 使用 CSP 进行基于标签的开发 - CSP 标记语言
    第二十七章使用CSP进行基于标签的开发-CSP标记语言CSP标记语言CSP标记语言是一组指令和标记,可用于控制CSP编译器生成的类。当编译CSP文档时,结果是一个执行......
  • 背包问题常见解题策略与例题解析
    背包问题作为常见的一种Dp题目的变法多种多样然而只要你理解透了背包的做法和各种优化模型就显而易见了千万不要似懂非懂如果还有疑虑可以参考我的另一篇文章​​​背......
  • CSP2020探险记
    注:原文写于2020.11.15,当时写在洛谷博客上,现在搬run到博客园中……以下内容为反面教材前言2020年11月7日,我参加了CSP2020入门组的复赛。考完之后感觉很不好,洛谷评测230,结......
  • 10.22 解题报告
    T1用时:约\(30\)min首先不难发现,若干个人组成的集合\(A\)若满足条件的话,当且仅当对于每一个元素\(A_i\),都有\(b_{A_i}\le\suma_{A_j}-a_{A_i}\),也即\(b_{A_i}+a_......
  • 第二十六章 使用 CSP 进行基于标签的开发
    第二十六章使用CSP进行基于标签的开发CSP允许使用标准HTML文件开发CSP应用程序。CSP编译器将HTML(和XML)文档转换为可以响应HTTP请求的类中的%CSP.Page。CS......
  • 10.24集训解题报告
    T1方程(\(equation\))题面:给定\(4\)个正整数\(a\),\(b\),\(c\),\(d\),并且保证\(c\)\(×\)\(d\)\(≤\)\(10^6\),请你求出有多少组正整数对\((x,y)\)满足如......
  • 10.23解题报告
    T1用时:\(20\)min要求统计数组\(a\)中有序三元组\((x,y,z)\)的个数,满足\(\gcd(a_x,a_y)=a_z\),直接枚举\(x\),\(y\),将\(x\)后面的加入一个map中,统计答案即可。#......
  • 10.24解题报告
    T1用时:约\(100\)min这个题用的时间最多,主要原因还是想多了,应该注意多观察一下题目性质:题目要求求出这个式子的正整数解个数:\(\frac{a}{x}+\frac{b}{c}=\frac{d}{y}\)......
  • 第二十五章 CSP Session 管理 - 选择策略时的注意事项
    第二十五章CSPSession管理-选择策略时的注意事项组的注意事项本节包含创建身份验证组时要考虑的一些要点。仅当决定必须通过会话对象共享数据时才使用会话共享。......
  • CSP 日照集训考试 Day2
    考的并不好。主要整理整理错因,并不是为了写题解。T1很简单的题,让我搞成了70pts考场上想的是预处理出第i位之后j出现的次数,然后枚举两个位置,求一下gcd,找一下......