- 20250415模拟赛一
Strawberry War---题解提示
- 2025-4-16 17:22:45 @
观察数据范围,H 和 W 的数据范围很容易让我们想到状压或者高维dp。这题是高维dp。
考虑 min{最大值-最小值} 问题怎么转换。我们可以枚举最小值,然后dp最小化最大值。
蛋糕块草莓数量的可能取值与子矩形的个数相同,只有 个,最小值只需要从中枚举。
考虑dp的状态设计, 表示以 为上下边界, 为左右边界的矩形,进行 次切割,在枚举的最小值限制下,所能分割出的最小的最大值是多少。
考虑dp转移设计,枚举切割线复杂度是 的,枚举 次切割在两个矩形的分配是 的。
草稿纸演算时间复杂度,先枚举最小值 ,然后枚举 dp 状态 ,最后是 dp 转移 。
我们发现,复杂度量级是惊人的 !
但是在dp过程中有很多剪枝,单单状态剪枝就能使复杂度降到 。
这里我们可以写程序辅助我们计算剪枝复杂度:
#include<bits/stdc++.h>
using namespace std;
int main() {
int cnt=0;
for(int a=1;a<=6;a++){
for(int b=a;b<=6;b++){
for(int c=1;c<=6;c++){
for(int d=c;d<=6;d++){
for(int t=0;t<(b-a+1)*(d-c+1);t++){
cnt++;
}
}
}
}
}
cout<<cnt;
return 0;
}
这份代码对矩形的边界枚举进行了/4的剪枝,对 值的上限也进行了剪枝。最后程序输出了 。
我们重新计算复杂度:枚举最小值 ,然后枚举 dp 状态 ,最后是 dp 转移
,复杂度很安全,放心冲吧!
0 条评论
目前还没有评论...