关键词:
BZOJ 1296: [SCOI2009]粉刷匠
Description
windy有 N 条木板需要被粉刷。 每条木板被分为 M 个格子。 每个格子要被刷成红色或蓝色。 windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。 每个格子最多只能被粉刷一次。 如果windy只能粉刷 T 次,他最多能正确粉刷多少格子? 一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。
Input
输入文件paint.in第一行包含三个整数,N M T。 接下来有N行,每行一个长度为M的字符串,'0'表示红色,'1'表示蓝色。
Output
输出文件paint.out包含一个整数,最多能正确粉刷的格子数。
Sample Input
111111
000000
001100
Sample Output
HINT
30%的数据,满足 1 <= N,M <= 10 ; 0 <= T <= 100 。 100%的数据,满足 1 <= N,M <= 50 ; 0 <= T <= 2500 。
SOLUTION:
我觉得这一题的做法很妙阿。
对于每一行我们更新一次f[i][j],表示这一行的前i个格子刷j次的最大值是多少。
然后用f 背包更新 dp[p][j],即前p行刷j次的最大值。感觉我讲的好糊啊,但代码还是很好理解的。
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 using namespace std; 6 char s[100]; 7 int a[100],f[100][100],dp[100][2510]; 8 int n,m,t; 9 int main() 10 { 11 int ans; 12 scanf("%d%d%d",&n,&m,&t); 13 for(int i=1;i<=n;i++) 14 { 15 memset(f,0,sizeof(f)); 16 scanf("%s",&s); 17 for(int j=1;j<=m;j++) a[j]=a[j-1]+s[j-1]-'0'; 18 for(int j=1;j<=m;j++) 19 for(int k=1;k<=m;k++) 20 { 21 for(int p=0;p<k;p++) 22 f[k][j]=max(f[k][j],f[p][j-1]+max(a[k]-a[p],k-p-a[k]+a[p])); 23 } 24 for(int j=1;j<=t;j++) 25 for(int k=1;k<=min(j,m);k++) 26 dp[i][j]=max(dp[i][j],dp[i-1][j-k]+f[m][k]); 27 28 } 29 for(int i=1;i<=t;i++) ans=max(ans,dp[n][i]); 30 printf("%d",ans); 31 return 0; 32 }
以上By LQ_double
bzoj1296:[scoi2009]粉刷匠
BZOJ1296:[SCOI2009]粉刷匠 Descriptionwindy 查看详情
[bzoj1296][scoi2009]粉刷匠[dp+分组背包]
1296:[SCOI2009]粉刷匠TimeLimit: 10Sec MemoryLimit: 162MBSubmit 查看详情
bzoj1296:[scoi2009]粉刷匠
Descriptionwindy有N条木板需要被粉刷。每条木板被分为M个格子。每个格子要被刷成红色或蓝色。windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。每个格子最多只能被粉刷一次。如果windy只能粉刷T次,他最... 查看详情
bzoj1296:[scoi2009]粉刷匠(dp)
1296:[SCOI2009]粉刷匠题目:传送门题解: DP新姿势:dp套dp 我们先单独处理每个串,然后再放到全局更新: f[i][k]表示当前串枚举到第i个位置,用了k次机会 F[i][j]则表示总答案代码:1#include<cstdio>2#include<cstring&... 查看详情
bzoj1296(scoi2009)粉刷匠(代码片段)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1296这道题暴露出自己: 1.对于区间与前缀的可转化性认识不足; 2.对于分组背包不够熟练。很容易想到最后是一个分组背包,枚举总共刷k次,前几个木条刷了k-j次,当前木条... 查看详情
bzoj1296--粉刷匠(dp)
1296:[SCOI2009]粉刷匠TimeLimit: 10Sec MemoryLimit: 162MBSubmit: 2324 Solved: 1340[Submit][Status][Discuss]Descriptionwindy有N条木板需要被粉刷。每条木板被分为M个格子。每个格子要被刷成红色或蓝色。wi 查看详情
1296:[scoi2009]粉刷匠[多重dp]
1296:[SCOI2009]粉刷匠TimeLimit: 10Sec MemoryLimit: 162MBSubmit: 1919 Solved: 1099[Submit][Status][Discuss]Descriptionwindy有N条木板需要被粉刷。每条木板被分为M个格子。每个格子要被刷成红色或蓝色。wi 查看详情
1296:[scoi2009]粉刷匠(代码片段)
TimeLimit: 10Sec MemoryLimit: 162MBSubmit: 2752 Solved: 1591[Submit][Status][Discuss]Descriptionwindy有N条木板需要被粉刷。每条木板被分为M个格子。每个格子要被刷成红色或蓝色。windy每次粉刷,只能选择一条木板上一 查看详情
粉刷匠(bzoj1296)
Descriptionwindy有N条木板需要被粉刷。每条木板被分为M个格子。每个格子要被刷成红色或蓝色。windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。每个格子最多只能被粉刷一次。如果windy只能粉刷T次,他最... 查看详情
codevs1744格子染色==bzoj1296粉刷匠
...运行结果 题目描述 Description有n条木板需要被粉刷。每条木板被分为m个格子。每个格子要被刷成红色或蓝色。输入描述 InputDescriptionDizzy每次粉刷,只能选择一条木板上一段连续的 查看详情
scoi2009粉刷匠
Description windy有N条木板需要被粉刷。每条木板被分为M个格子。每个格子要被刷成红色或蓝色。windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。每个格子最多只能被粉刷一次。如果windy只能粉刷T... 查看详情
[scoi2009]粉刷匠(分组背包)(代码片段)
Problemwindy有N条木板需要被粉刷。每条木板被分为M个格子。每个格子要被刷成红色或蓝色。windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。每个格子最多只能被粉刷一次。如果windy只能粉刷T次,他最多... 查看详情
p4158[scoi2009]粉刷匠(dp)(代码片段)
P4158[SCOI2009]粉刷匠(dp)考虑每行独立计算。所以可以开一个三维数组:g[i][j][k]g[i][j][k]g[i][j][k]第iii行前jjj列涂了kkk次的最大值。然后再开一个二维数组f[i][j]f[i][j]f[i][j]表示前iii行涂了jjj次的最大值。预处理二维前缀和。然后ggg... 查看详情
p4158[scoi2009]粉刷匠(代码片段)
题目链接我们不妨先考虑只有一行的情形。我们做两个前缀和(red_i,bule_i)分别表示前(i)个里有多少个红色块和蓝色块。设(f[i][k])为做到第(i)块,此时用了(k)次涂刷的最大收益。我们思考如下问题:既然重复涂色没有收益,那么我... 查看详情
题解p4158[scoi2009]粉刷匠(代码片段)
状态:dp[i][j][k][0/1]:到达第i行时,到达第j列时,刷到第k次时,这一格有没有刷对转移换一块木板时肯定要多刷一次dp[i][j][k][0]=max(dp[i-1][m][k-1][0],dp[i-1][m][k-1][1]);dp[i][j][k][1]=max(dp[i-1][m][k-1][0],dp[i-1][m][k-1][1])+1;当前格子与上一个格子颜色... 查看详情
[scoi2009]粉刷匠(动态规划,序列dp,背包)(代码片段)
分别对每块木板做区间dp,设(g[i][j])表示前i个格子,刷恰好j次,并且第i格是合法的最多合法的格子数.从前往后枚举断点来转移就好了.这样处理再出来(g[i][j])每一块木板i刷j次的最大合法格子数.最后再合并每块木板的答案,用(dp[i][j])... 查看详情
清北前紧急补课12粉刷匠(代码片段)
我是一个粉刷匠粉刷本领强~~要想看真正的粉刷匠请进入这小哥哥的blog嘻嘻嘻题目描述windy有N条木板需要被粉刷。每条木板被分为M个格子。每个格子要被刷成红色或蓝色。windy每次粉刷,只能选择一条木板上一段连续的格子,然... 查看详情
[bzoj1297][scoi2009]迷路
1297:[SCOI2009]迷路TimeLimit: 10Sec MemoryLimit: 162MBSubmit: 1418 Solved: 1017[Submit][Status][Discuss]Descriptionwindy在有向图中迷路了。该有向图有N个节点,windy从节点0出发,他必须恰好在T时刻 查看详情