【题目描述】
有n条木板需要被粉刷。每条木板被分为m个格子。每个格子要被刷成红色或蓝色。
【输入描述】
每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。每个格子最多只能被粉刷一次。
如果只能粉刷t次,询问最多能正确粉刷多少格子。
一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。
【输出描述】
第一行包含三个整数,n、m、t。接下来有n行,每行一个长度为m的字符串,0表示红色,1表示蓝色。
【样例输入】
3 6 3
111111000000001100 【样例输出】
16
【数据范围及提示】
1 ≤ n,m ≤ 50,0 ≤ t ≤ 2500。
源代码:#include#include using namespace std;int n,m,T,ans(0),Sum[2501],f[2501][2501],DP[2501][2501]; //Sum[i]=该行前i个格子是1的格子的数目。char i[2501];int main(){ scanf("%d%d%d",&n,&m,&T); for(int k=1;k<=n;k++) { scanf("%s",i+1); for (int a=1;a<=m;a++) Sum[a]=Sum[a-1]+(i[a]=='1'); for (int a=1;a<=m;a++) for(int b=1;b<=m;b++) { f[b][a]=0; //取最大值先赋最小值。 for (int c=0;c