首页 > 其他分享 >P11233 CSP-S 2024 染色

P11233 CSP-S 2024 染色

时间:2024-10-27 20:32:59浏览次数:1  
标签:颜色 P11233 max sum 2024 int 最大值 CSP dp

P11233 CSP-S 2024 染色

考试最后码方程忘记 \(a[i-1]\) 了,调不出来,只好 \(50pts\) 收尾。

思路

\(dp\) 的难点在于确定一段的颜色后,无法快速找到上一段相同颜色的结尾。

从这里入手,设 \(dp[i][0/1][0/1]\) 表示第 \(i\) 位颜色为 \(1/0\),第三维表示是一段颜色的 \(0\) 开头或 \(1\) 结尾。

设 \(sum[i][j]\) 为 \([i,j]\) 为同一个颜色的得分,有递推式:

\[sum[i][j]=sum[i][j-1]+(a[j-1]==a[j])\times a[j] \]

其中 \(i<j\) 且 \(sum[i][i]=0\)。

接下来考虑转移。

\(i\) 为一段颜色 \(0\) 的开头,\([j,i-1]\) 为一段颜色 \(1\),那么上一段颜色 \(0\) 的结尾在 \(j-1\) 处。之所以从 \(dp[j][1][0]\) 转移是因为需要加上 \(j\) 与上一段 \(1\) 结尾的贡献。

\[dp[i][0][0]=\max_{j<i}(dp[j][1][0]+sum[j][i-1]+(a[j-1]==a[j])\times a[i]) \]

类似的,有:

\[dp[i][1][0]=\max_{j<i}(dp[j][0][0]+sum[j][i-1]+(a[j-1]==a[i])\times a[i]) \]

\(i\) 为一段颜色 \(0\) 的结尾,这段颜色的开头 \(j\) 可以是 \([1,i]\) 中任意一个点。

那么有 \(dp[i][0][1]=\max_{j\leq i}(dp[j][0][0]+sum[j][i])\)。

类似的 \(dp[i][1][1]=\max_{j\leqq i}(dp[j][1][0]+sum[j][i])\)。

观察 \(sum\) 的求法,发现本质上可以前缀和作差优化。

重新设 \(sum[i]\) 为 \([1,i]\) 的颜色相同贡献,\([l,r]\) 颜色相同的贡献等于 \(sum[r]-sum[l]\)。

方程变为:

\[dp[i][0][0]=\max_{j<i}(dp[j][1][0]-sum[j]+(a[j-1]==a[j])\times a[i])+sum[i-1] \]

\[dp[i][0][1]=\max_{j\leq i}(dp[j][0][0]-sum[j])+sum[i] \]

剩下两条与上面方程类似,就不写了。

对于方程 \(dp[i][0][1]\),\(dp[j][0][0]-sum[j]\) 中取一个最大值可以 \(O(1)\) 的实现,对于另一个,发现难点在于 \(a[j-1]\) 与 \(a[i]\) 颜色相同时会产生一个 \(a[i]\) 的贡献。

那么先对于所有的 \(j\) 都不加 \(a[j-1]\) 与 \(a[i]\) 的贡献求一个 \(dp[j][1][0]-sum[j]\) 的最大值,同时在 \(a[j-1]\) 与 \(a[i]\) 相同的 \(j\) 里也求一个 \(dp[j][1][0]-sum[j]\) 的最大值,最后将后一个的最大值加 \(a[i]\) 与前一个最大值比较,便可以得出 \(dp[i][0][0]\) 的最终答案。

最后答案时 \(\max(dp[n][0][1],dp[n][1][1])\)。

Ps:其实你发现第 3 维的作用仅限于统计答案,所以其实可以去掉。

具体操作看实现,时间复杂度 \(O(n)\)。

CODE

#include<bits/stdc++.h>
using namespace std;

#define ll long long

const int maxL=1e6+5,maxn=2e5+5;

int n;
int a[maxn];

ll cho[maxL][2],acl[2],sum[maxn],dp[maxn][2][2];

int main()
{
    // freopen("color2.in","r",stdin);
    // freopen("color.out","w",stdout);
    int _;
    scanf("%d",&_);
    while(_--)
    {
        memset(cho,-0x3f,sizeof(cho));
        memset(acl,0,sizeof(acl));
        memset(sum,0,sizeof(sum));
        memset(dp,0,sizeof(dp));
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        for(int i=1;i<=n;i++) sum[i]=sum[i-1]+(a[i-1]==a[i])*a[i];
        for(int i=1;i<=n;i++)
        {
            dp[i][0][0]=max(acl[1]+sum[i-1],cho[a[i]][1]+sum[i-1]+a[i]);
            dp[i][1][0]=max(acl[0]+sum[i-1],cho[a[i]][0]+sum[i-1]+a[i]);
            acl[0]=max(acl[0],dp[i][0][0]-sum[i]);
            acl[1]=max(acl[1],dp[i][1][0]-sum[i]);
            cho[a[i-1]][1]=max(cho[a[i-1]][1],dp[i][1][0]-sum[i]);
            cho[a[i-1]][0]=max(cho[a[i-1]][0],dp[i][0][0]-sum[i]);
            dp[i][0][1]=acl[0]+sum[i];
            dp[i][1][1]=acl[1]+sum[i];
        }
        printf("%lld\n",max(dp[n][0][1],dp[n][1][1]));
    }
}

后记

去年忘记加 1 少 \(100pts\),今年忘记 \(-1\) 少 \(50pts\)……

标签:颜色,P11233,max,sum,2024,int,最大值,CSP,dp
From: https://www.cnblogs.com/binbin200811/p/18508887

相关文章

  • 2024-2025-1 20241327 《计算机基础与程序设计》第五周学习总结
    作业信息|2024-2025-1-计算机基础与程序设计)||--|-|2024-2025-1计算机基础与程序设计第五周作业)||快速浏览一遍教材计算机科学概论(第七版),课本每章提出至少一个自己不懂的或最想解决的问题并在期末回答这些问题|作业正文|https://www.cnblogs.com/shr060414/p/18440575|教......
  • 【刷题10】2024.10.26
    来源:CTFHubSVN泄露扫描一下目录,发现有/svn,所以是svn泄露使用工具dvcs-ripper将泄露的文件下载到本地目录中先用ls-al查看,再转到.svn文件夹中查看下载的文件。根据题目可知,在旧版服务器,所以访问pristime文件夹,在其中找到了flagctfhub{4e0bf99268e97......
  • CSP2024游记
    CSP2024游记Day0去八中试机,感觉好像比难堪的电脑稍微快一点(然而考试当天好像并不是这样)。发现VSCode已经把插件下好了。Day1CSP-J没有。CSP-S13:30从家里出发去八中。到了之后原地乱晃,吃了一块巧克力(齁甜)。遇见了几个老师(忘了是谁了)。14:05进了八中科技楼。差点走成......
  • CSP-S2024&CCPC济南站游记
    初赛忘了,乱打的。得分-估分=\(13\),得分=\(79\)。Day-5忘了,打模拟赛被打爆。Day-4忘了,打模拟赛被打爆。Day-3忘了,打模拟赛被打爆。Day-2忘了,打模拟赛被打爆。我患上了一种只会做T1的病。晚上画画,CF啥都不会。Day-1和wmh坐上了一趟高铁。到了以后疯狂发徽章......
  • CSP-J/S 2024 游寄
    满纸荒唐言,一把辛酸泪。其实不是去年没去,只是去年复赛喜提15pts荣获四等奖,木有获奖证书。今年决定一雪前耻!坐标:窄西省浅圳市某郊区(。该区是弱区,目前已知的唯一一个官方承认的(不包括我的省四)复赛获奖选手是CSP-J2022以90pts的高分荣获三等奖(T1一个红题没AC?这是咋过初......
  • CSP2024游记
    发现很久没有写游记了!为什么呢,大概是中间的apio和noi都烂完了吧,这次csp虽然也不太行,但是毕竟没有到崩盘的地步,还是写一下罢。Day-1发生一些神秘的事情,不好评价。Day0下午在机房测试了frc,没有出问题。RoFtaCD的代码收不上去,他在主目录下建了个叫noi的文件夹,原来主......
  • CSP2024游记
    原来一打完马上写了。写了半程地铁。手机太卡,后台卡没了。果然八年前的手机已经该退役了。Day-2最后一场模拟赛了。因为是全真模拟所以机房里围了板子。注意到前一天训练记录刚写过不要一直盯一道题做,但是这场还是磕T2磕了三个多小时,赢赢赢赢赢赢赢赢赢赢赢赢赢赢赢赢赢赢......
  • CSP-S2024游寄
    复盘14:20进了考场,队长在我们考场……然后就试了一下机,发现自己不会Linux,还是用Dev,打开调试看了一下,发现没有编译命令,给我惊了一下,居然忘了编译命令,只能硬着头皮上了。把东西都备份了一下,然后发现鼠标滚轮是坏的,还有屏幕看着特别花,不一会脑袋给我看昏了。这算是一些劣势。然后......
  • 游记 CSP-S 2024
    初赛太难了。广附黄华路考点不能带“无存储功能的手表”以及“非透明的水杯”进入考场。花了10分钟调教了机器。T2、T4的题面好长。T1直接贪心就行。T2先二分得到超速区间,然后单调队列优化dp。期间被无车被抓的样例卡了一次。T3的dp设计之前见过,然后优化很显然。一......
  • 20222425 2024-2025-1 《网络与系统攻防技术》实验三实验报告
    202224252024-2025-1《网络与系统攻防技术》实验三实验报告目录1.实验内容2.实验问题3.实验过程3.1正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧3.2通过组合应用各种技术实现恶意代码免杀3.3用另一电脑实测,在杀软开启的情况下,可运行并回连成功,......