BZOJ 1296: [SCOI2009]粉刷匠 dp
2017-10-19 19:44
363 查看
1296: [SCOI2009]粉刷匠
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2246 Solved: 1298
[Submit][Status][Discuss]
Description
windy有 N 条木板需要被粉刷。 每条木板被分为 M 个格子。 每个格子要被刷成红色或蓝色。 windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。 每个格子最多只能被粉刷一次。 如果windy只能粉刷 T 次,他最多能正确粉刷多少格子? 一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。Input
输入文件paint.in第一行包含三个整数,N M T。 接下来有N行,每行一个长度为M的字符串,’0’表示红色,’1’表示蓝色。Output
输出文件paint.out包含一个整数,最多能正确粉刷的格子数。Sample Input
3 6 3111111
000000
001100
Sample Output
16HINT
30%的数据,满足 1 <= N,M <= 10 ; 0 <= T <= 100 。 100%的数据,满足 1 <= N,M <= 50 ; 0 <= T <= 2500 。Source
题解:woc自己瞎搞这道题居然做出来了【虽然很不优。
dp[i][j][k][2]表示前i行前j列涂第k次,且第i行第j列这块涂0/1的最多正确粉刷次数。【这个定义就很23333
注意每一行的初始值。
【其实以前考过这道题,然而还是忘了
#include<bits/stdc++.h> using namespace std; const int N = 50 + 5; const int T = 2500 + 5; int n,m,t; int a ; int dp [T][2]; int main(){ scanf("%d%d%d",&n,&m,&t); for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) scanf("%1d",&a[i][j]); for(int k=1;k<=t;++k){ for(int i=1;i<=n;++i){ dp[i][1][k][0]=max(dp[i-1][m][k-1][0],dp[i-1][m][k-1][1])+(a[i][1]==0); dp[i][1][k][1]=max(dp[i-1][m][k-1][0],dp[i-1][m][k-1][1])+(a[i][1]==1); for(int j=2;j<=m;++j){ if(a[i][j]==1){ dp[i][j][k][1]=max(dp[i][j-1][k][1]+1,dp[i][j-1][k-1][0]+1); dp[i][j][k][0]=max(dp[i][j-1][k-1][1],dp[i][j-1][k][0]); } else{ dp[i][j][k][1]=max(dp[i][j-1][k][1],dp[i][j-1][k-1][0]); dp[i][j][k][0]=max(dp[i][j-1][k-1][1]+1,dp[i][j-1][k][0]+1); } } } } int ans=0; for(int i=1;i<=t;++i){ ans=max(ans,max(dp [m][i][0],dp [m][i][1])); } printf("%d\n",ans); return 0; }
相关文章推荐
- bzoj-1296[SCOI2009]粉刷匠(dp)
- BZOJ 1296: [SCOI2009]粉刷匠 分组DP
- bzoj 1296: [SCOI2009]粉刷匠 DP
- bzoj 1296 [SCOI2009]粉刷匠 (dp)
- BZOJ 1296 [SCOI2009]粉刷匠 - DP
- BZOJ1296 [SCOI2009]粉刷匠 【dp】
- bzoj 1296: [SCOI2009]粉刷匠(DP+DP)
- BZOJ_1296_[SCOI2009]粉刷匠_DP
- BZOJ1296 [SCOI2009]粉刷匠 【dp】
- 【bzoj1296】【[SCOI2009]粉刷匠】多次背包dp及小小的优化
- [BZOJ1296][SCOI2009]粉刷匠(DP)
- 【bzoj1296】【[SCOI2009]粉刷匠】多次背包dp及小小的优化
- 【bzoj1296】【scoi2009】【粉刷匠】【dp】
- 【Dp】Bzoj1296 [SCOI2009] 粉刷匠
- bzoj1296 [SCOI2009]粉刷匠 ( 分组背包DP )
- 【BZOJ1296】[SCOI2009]粉刷匠【区间DP】【背包DP】
- BZOJ 1296: [SCOI2009]粉刷匠( dp )
- bzoj 1296: [SCOI2009]粉刷匠【dp+背包dp】
- bzoj1296 [SCOI2009]粉刷匠 区间dp+背包
- bzoj 1296 [SCOI2009]粉刷匠 dp