博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1296: [SCOI2009]粉刷匠
阅读量:4509 次
发布时间:2019-06-08

本文共 1001 字,大约阅读时间需要 3 分钟。

这题很强,get到新姿势dp套dp。

f[j][k]表示第i个串,枚举到第j个位置涂了k次的最优解。

那么O(n^3)搞定。

然后我挂在背包了。。。

就是拿dp完的值去背包。好像不能直接空间T的背包,要每个串记录转移,原因不明。

 

#include
#include
#include
#include
#include
#include
using namespace std;int f[60][60],b[60][3100];char ss[110];int s[110];int main(){ freopen("paint.in","r",stdin); freopen("paint.out","w",stdout); int n,m,T; scanf("%d%d%d",&n,&m,&T); memset(b,0,sizeof(b)); for(int i=1;i<=n;i++) { scanf("%s",ss+1); s[0]=0;for(int j=1;j<=m;j++)s[j]=s[j-1]+(ss[j]-'0'); memset(f,0,sizeof(f)); for(int j=1;j<=m;j++) for(int k=1;k<=min(T,j);k++) for(int jj=1;jj<=j;jj++) { int d=s[j]-s[jj-1]; f[j][k]=max(f[j][k],f[jj-1][k-1]+max(d,(j-jj+1)-d)); } for(int j=1;j<=T;j++) { for(int k=1;k<=min(m,j);k++) b[i][j]=max(b[i][j],b[i-1][j-k]+f[m][k]); } } int ans=0; for(int i=1;i<=T;i++)ans=max(ans,b[n][i]); printf("%d\n",ans); return 0;}

 

转载于:https://www.cnblogs.com/AKCqhzdy/p/8392333.html

你可能感兴趣的文章
laravel 多检索条件列表查询
查看>>
Java_基础—finally关键字的特点及作用
查看>>
SQLServer 日期函数大全
查看>>
激活webstorm11
查看>>
mysql 行转列 和 列转行
查看>>
[Leetcode]
查看>>
再谈vertical-align与line-height
查看>>
有关时延扩展的双语句子
查看>>
工作多年后积累的设计灵活,稳定,优秀WinForms应用程序的最佳实践 WinForms best practice...
查看>>
iOS开发——高级篇——iOS键盘的相关设置(UITextfield)
查看>>
JVMGC机制
查看>>
IAR for AVR 报array is too large错误 【已解决】
查看>>
老子《道德经》第六十二章
查看>>
Junit问题01 利用 @Autowired 注入失效问题
查看>>
20180711
查看>>
Js常见的创建对象
查看>>
IOS拖动
查看>>
httpclient的使用
查看>>
Kafka集群副本分配算法解析
查看>>
vue单页面条件下添加类似浏览器的标签页切换功能
查看>>