问题描述

LG4158


题解

设\(opt[i][j][k]\)代表到\((i,k)\)刷了\(j\)次的方案数。

一开始DP顺序有点问题,调了很长时间。

务必考虑清楚DP顺序问题


\(\mathrm{Code}\)

#include<bits/stdc++.h>
using namespace std; template <typename Tp>
void read(Tp &x){
x=0;char ch=1;int fh;
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-'){
fh=-1;ch=getchar();
}
else fh=1;
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+ch-'0';
ch=getchar();
}
x*=fh;
} const int maxn=53; int n,m,t;
int a[maxn][maxn],s[maxn][maxn*maxn],opt[maxn][maxn*maxn][maxn];
int f[maxn][maxn*maxn]; void println_opt(){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
for(int k=0;k<=t;k++){
printf("opt[%d][%d][%d]=%d\n",i,j,k,opt[i][j][k]);
}
}
}
} int main(){
read(n);read(m);read(t);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%1d",&a[i][j]);
s[i][j]=s[i][j-1]+a[i][j];
}
}
// opt[1][0][0]=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
// int ed=min((i-1)*n+j,t);
for(int k=1;k<=m;k++){
// opt[i][j][k]=opt[i][0][k-1]+max(s[i][k],k-s[i][k]);
for(int p=j-1;p<k;p++){
opt[i][j][k]=max(opt[i][j][k],opt[i][j-1][p]+max(s[i][k]-s[i][p],k-p-(s[i][k]-s[i][p])));
}
}
}
//for(int j=1;j<=t;j++) opt[i+1][0][j]=opt[i][m][j];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=t;j++){
for(int k=0;k<=min(j,m);k++){
f[i][j]=max(f[i][j],f[i-1][j-k]+opt[i][k][m]);
}
}
}
int ans=0;
for(int i=1;i<=t;i++) ans=max(ans,f[n][i]);
printf("%d\n",ans);
// println_opt();
return 0;
}

LG4158 「SCOI2009」粉刷匠 线性DP的更多相关文章

  1. 「USACO16OPEN」「LuoguP3147」262144(区间dp

    P3147 [USACO16OPEN]262144 题目描述 Bessie likes downloading games to play on her cell phone, even though ...

  2. BZOJ 1296: [SCOI2009]粉刷匠 分组DP

    1296: [SCOI2009]粉刷匠 Description windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上 ...

  3. 1296: [SCOI2009]粉刷匠[多重dp]

    1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1919  Solved: 1099[Submit][Statu ...

  4. 【BZOJ1296】[SCOI2009]粉刷匠 (DP+背包)

    [SCOI2009]粉刷匠 题目描述 \(windy\)有 \(N\) 条木板需要被粉刷. 每条木板被分为 \(M\) 个格子. 每个格子要被刷成红色或蓝色. \(windy\)每次粉刷,只能选择一条 ...

  5. bzoj1296: [SCOI2009]粉刷匠(DP)

    1296: [SCOI2009]粉刷匠 题目:传送门 题解: DP新姿势:dp套dp 我们先单独处理每个串,然后再放到全局更新: f[i][k]表示当前串枚举到第i个位置,用了k次机会 F[i][j] ...

  6. bzoj1296【SCOI2009】粉刷匠

    1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1479  Solved: 837 [id=1296" ...

  7. 2018.09.02 bzoj1296: [SCOI2009]粉刷匠(dp套dp)

    传送门 dp好题. 先推出对于每一行花费k次能最多粉刷的格子数. 然后再推前i行花费k次能最多粉刷的格子数. 代码: #include<bits/stdc++.h> #define N 5 ...

  8. bzoj 1296: [SCOI2009]粉刷匠【dp+背包dp】

    参考:http://hzwer.com/3099.html 神题神题 其实只要知道思路就有点都不难-- 先对每一行dp,设g[i][j]为这行前i个格子粉刷了k次最大粉刷正确数,随便n^3一下就行 设 ...

  9. BZOJ1296 [SCOI2009]粉刷匠 【dp】

    题目 windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每个格子最多只能被粉刷 ...

随机推荐

  1. python3装饰器用法示例

    装饰器在编写后台的逻辑时有可能会用到,比方说一个场景:公司的员工想要登录自己公司的考勤记录系统去修改自己的考勤,以前是随便谁都有权限去修改,这样老板不同意了,现在,要在你登录前加一个权限验证的逻辑,如 ...

  2. How to: Initialize Business Objects with Default Property Values in XPO 如何:在 XPO 中用默认属性值初始化业务对象

    When designing business classes, a common task is to ensure that a newly created business object is ...

  3. iOS----------jenkins

    错误日志: ERROR: Error fetching remote repo 'origin' Finished: FAILURE ERROR: Error cloning remote repo ...

  4. 修改so库中的依赖名

    修改so库中的依赖名 在ArchLinuxArm上有一些针对aarch64, arm, armeabi-v7a等Android常用架构的so库可以下载,有时候可以省去很多编译时间,且都是编译optim ...

  5. 搭建Vue开发环境

    1.安装Node.js 安装包下载地址: https://nodejs.org/en/ 安装时可以选择是否自动安装必要的工具,如Chocolatey.Python2,这里我选择了自动安装 Node.j ...

  6. VS2017无法打开Razor视图文件提示:引发类型"System.Exception"异常

    背景介绍 由于电脑装了R#(吃内存大户),导致VS2017打开项目慢以及卡顿,因此在扩展和更新这个功能里面将没用的插件关闭了,导致.NET CORE的Razor视图文件打不开(真心是一脸懵逼,关个插件 ...

  7. Oracle解析逗号分隔的字符串,或者01110110101此类数据

    -- 1.提取此类数据中的1的索引位置,从1开始    例: 0001100001100 --> 4,5,10,11 create or replace function hazq_instr_ ...

  8. CentOS 7上的程序管理:rpm、yum和源码编译安装

    简介 在Linux的早期时代(也许吧?我猜的.也可能是Unix.),想要在系统上安装一款应用程序,是比较复杂的.需要专业的人员自行获取程序的源代码,并且编译安装,这是非常的复杂且需要一定的专业功底的, ...

  9. leetcode题解:回文数

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...

  10. BitMap原理

    BitMap原理