230909 NOIP 模拟赛 T1 cake 题解
原题#
题意#
有一块
对于每一组
解#
首先来个二维前缀和,然后我们来考虑具体做法。
数据范围一眼状压。那么久先考虑一个最暴力的状压做法,就是暴力枚举横着切的状态和竖着切的状态,然后计算答案。
光是枚举就
然后考虑到是对每一组
然后你就会发现把两维都状压真的很逆天,因为你在转移的时候计算贡献要用到的信息其实只有,就是,假如我们先只考虑一维,每次你切下一刀,转移的时候其实只关心上一刀切在哪里,然后中间多出来的那一堆和这一刀后面那一堆是需要计算的贡献,所以就是说你只需要知道上一刀切在哪里就可以了。
那么就有一个经典的
然后就可以发现如上述计算贡献的时候,你还需要知道另一维是怎么分割的,所以可以加一维状压。
总的就是
然后呢可以发现这题的的数据范围的话,对于状态
总的时间复杂度就是
总结#
这题的过程大概就是,先考虑暴力,然后注意到题目的问题是要对每一组
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define il inline
#define re register
const int N=15;
int n,m,a[17][17],s[17][17],dp[N][N],U;
int ans[17][17],suf[N];
#define pb push_back
vector<int>v;
il int read(){
re int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+(c^48),c=getchar();
return x*f;
}
il int Sum(int x1,int y1,int x2,int y2){
return s[x2][y2]-s[x2][y1-1]-s[x1-1][y2]+s[x1-1][y1-1];
}
il bool ex(int i,int j){
return ((i>>(j-1))&1);
}
int main(){
// freopen("cake3.in","r",stdin);
// freopen("cake3.out","w",stdout);
n=read(),m=read();
U=1<<(n-1);
for(re int i=1;i<=n;i++)
for(re int j=1;j<=m;j++)a[i][j]=read();
for(re int i=1;i<=n;i++)
for(re int j=1;j<=m;j++)
s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
for(re int i=0;i<U;i++){
v.clear();
v.pb(0);
for(re int j=1;j<n;j++)
if(ex(i,j))v.pb(j);
v.pb(n);
int siz=v.size();
for(re int j=0;j<=m;j++)
for(re int k=0;k<=m;k++)dp[j][k]=0;
for(re int j=0;j<m;j++){
int res=1e9;
for(re int k=1;k<siz;k++)
res=min(res,Sum(v[k-1]+1,j+1,v[k],m));
suf[j]=res;
}
dp[0][0]=suf[0];
int cnti=__builtin_popcount(i);
ans[cnti][0]=max(ans[cnti][0],dp[0][0]);
for(re int now=1;now<m;now++)
for(re int pst=0;pst<now;pst++){
int res=1e9;
for(re int k=1;k<siz;k++)res=min(res,Sum(v[k-1]+1,pst+1,v[k],now));
for(re int cnt=1;cnt<=now;cnt++){
dp[now][cnt]=max(dp[now][cnt],min(dp[pst][cnt-1],min(res,suf[now])));
ans[cnti][cnt]=max(ans[cnti][cnt],dp[now][cnt]);
}
}
}
for(re int i=0;i<n;i++,putchar('\n'))
for(re int j=0;j<m;j++)printf("%d ",ans[i][j]);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)