前面是题解,后面是垃圾话。
T1 P1541 [NOIP2010 提高组] 乌龟棋
没脑子直接设 \(f_{p,i,j,k,w}\),为走到 \(p\),还剩 \(1,2,3,4\) 牌各 \(i,j,k,w\) 张,\(9\cdot 10^8\),发现到一个点只要三种牌的数量确定,最后一种也确定了,所以直接设 \(f_{p,i,j,k}\) 表示三种牌的就行,大力 DP 即可。
T2 P1776 宝物筛选(多重背包)
多重背包板子,赛时忘了二进制咋拆了。
a[i]=read();
sum+=a[i]*i;
int t=1;
while(a[i]>=t){
v[++n]=i*t;
a[i]-=t;t*=2;
}
if(a[i])v[++n]=i*a[i];
也能单调队列优化多重背包(还不会打,哈哈);
T3 P4954 [USACO09OPEN] Tower of Hay G
好题,贪心加 DP,明天公自补严谨的题解。
T4 围栏障碍训练场(acwing329)
发现正着很难确定咋走,设 \(f_{i,0/1}\) 表示从第 \(i\) 层左右端点到终点的最短路程。
比较困难的是,我们不知道应该从哪里转移,把它想象成小球的话,我们不知道它会落在哪,所以我们使用线段树查询第一个当前坐标在它的范围内的层数。时间复杂度 \(\mathcal{O}(n\log n)\),代码明天补。
赛时写的记忆化搜索,开了 O2 后跑飞快,时间复杂度上限 \(\mathcal{O}(n^2)\),这题数据就给 \(3\times 10^4\),没被卡挺遗憾的。
点击查看垃圾话
自己学的没有忘得快,简单写不对,难的想不出,天天都在焦虑。已经过去一年了,感觉在 OI 这条路上已经迷失方向了,或者说忘了自己为什么打 OI 了。