10.3 代码源 2024 CSP-S 模拟赛 Day 8
省流:\(100+15+0+5=120\)
简称:唐诗
T1
开始想了个这:
int dp[105][N][N];
/*
dp[i][j][k]:第i轮,攻击j,增量k,最大伤害
dp[i][j][k]=max(dp[i][j][k],dp[i-1][j-k][k]+j-k+a[i-1],dp[i-1][j-c[i-1]-k][k],dp[i-1][j-k][k-b[i-1]]);
*/
然后发现一个神奇性质:
设操作后攻击了 \(j\) 次且轮次分别为 \(p_1...p_j\)
然后二操作的贡献就是:
\[\sum^{j}_{k=1}(p_k-i) \cdot b_i=(k-i \cdot j)\cdot b_i
\]
所以有以下柿子:
int f[105][105][N*10];
/*
f[i][j][k]:第i轮,操作后攻击j次,攻击所在回合数和为k时最大伤害
操作贡献:1.a[i] 2.b[i]*(k−i*j) 3.c[i]*j
f[i][j][k]=max(f[i+1][j-1][k-i]+a[i],f[i+1][j][k]+j*c[i],f[i+1][j][k]+b[i]*(k-j*i))
*/
memset(f,-10,sizeof(f));
f[n][1][n]=a[n];
bd(i,n-1,1)
{
fd(j,0,n-i+1)//最多攻击n-i+1次
{
fd(k,(i+(i+j-1))*j/2,(n+(n-j+1))*j/2)//全放前和全放后
{
f[i][j][k]=max(f[i][j][k],f[i+1][j-1][k-i]+a[i]);//1
f[i][j][k]=max(f[i][j][k],f[i+1][j][k]+b[i]*(k-j*i));//2
f[i][j][k]=max(f[i][j][k],f[i+1][j][k]+j*c[i]);//3
ans=max(ans,f[i][j][k]);
}
}
}
T2
写了一个 \(O(n^3)\) 的,然后赛后发现可以用前缀和优化成 \(O(n^2)\)……
然后正解是树状数组……
T3
一眼暴力,然后懒得写,去看 T4 了……
正解可以贪心。题解(%%%zzn%%%)
T4
最有思路的一集()
\(n=1\) 的 \(5\) 分很好想,赛时一直在想 \(n=2\) 的,复杂度 \(O(c^2)\),但是交了全 WA……
正解是容斥和 and 卷积……
根本看不懂啊 QwQ
总结
-
还是 DP/贪心 大法好 -
尽量把暴力打满
-
多想一下暴力的优化(根号分治、前缀和等)
\(\LARGE{唐}\)
本文来自博客园,作者:whrwlx,转载请注明原文链接:https://www.cnblogs.com/whrwlx/p/18447019
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!