P4158 [SCOI2009]粉刷匠
我们不妨先考虑只有一行的情形。
我们做两个前缀和
设
我们思考如下问题:既然重复涂色没有收益,那么我们强制让我们的涂色方案没有重叠的情况,即让我们对于这一行的方案如下图:
可以看出一段木块被分割成若干块(无色代表没涂色。
我们只要从
所以对于一条木块我们有了
for(int r = 1;r <= m;++r){
for(int k = 1;k <= m;++k){
f[r][k] = f[r - 1][k];
for(int l = 1;l <= r;++l){
f[r][k] = std::max(f[l - 1][k - 1] + red[r] - red[l - 1],f[r][k]);
f[r][k] = std::max(f[l - 1][k - 1] + bule[r] - bule[l - 1],f[r][k]);
}
}
}
我们接下来考虑我们做完了一条木块怎么统计答案:
for(int to = t;to >= 0;-- to)
for(int k = 0;k <= std::min(m,(ll)to);++k)
fans[to] = std::max(fans[to],fans[to - k] + f[m][k]),ans = std::max(ans,fans[to]);
类似于一维背包即可。(注意枚举
所以最后的复杂度是
喜闻乐见的代码环节
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
ll n,m,t,ans = 0,f[55][55];
ll red[55],bule[55];
ll fans[2505];
void init(){
memset(f,0,sizeof(f));
memset(red,0,sizeof(red));
memset(bule,0,sizeof(bule));
}
int main(){
// freopen("q.in","r",stdin);
// freopen("q.out","w",stdout);
memset(fans,0,sizeof(fans));
scanf("%lld%lld%lld",&n,&m,&t);
for(int i = 1;i <= n;++i){
init();
char s[55];
scanf("%s",s + 1);
for(int i = 1;i <= m;++i){
red[i] = red[i - 1];
bule[i] = bule[i - 1];
if(s[i] == '0')
red[i] ++ ;
else
bule[i] ++ ;
}
for(int r = 1;r <= m;++r){
for(int k = 1;k <= m;++k){
f[r][k] = f[r - 1][k];
for(int l = 1;l <= r;++l){
f[r][k] = std::max(f[l - 1][k - 1] + red[r] - red[l - 1],f[r][k]);
f[r][k] = std::max(f[l - 1][k - 1] + bule[r] - bule[l - 1],f[r][k]);
}
}
}
// for(int i = 1;i <= m;++i,puts(""))
// for(int k = 1;k <= m;++k)
// std::cout<<f[i][k]<<" ";
for(int to = t;to >= 0;-- to)
for(int k = 0;k <= std::min(m,(ll)to);++k)
fans[to] = std::max(fans[to],fans[to - k] + f[m][k]),ans = std::max(ans,fans[to]);
}
std::cout<<ans<<std::endl;
}
本文作者:fhq_treap
本文链接:https://www.cnblogs.com/dixiao/p/14110760.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 手把手教你更优雅的享受 DeepSeek
· 腾讯元宝接入 DeepSeek R1 模型,支持深度思考 + 联网搜索,好用不卡机!
· AI工具推荐:领先的开源 AI 代码助手——Continue
· 探秘Transformer系列之(2)---总体架构
· V-Control:一个基于 .NET MAUI 的开箱即用的UI组件库