题目链接:http://codeforces.com/problemset/problem/549/D
题意:有一个n*m的矩阵,初始化为0,你可以将(1,1)到(x,y)的位置加上一个数(前缀矩阵),要求变成给出的矩阵(B表示-1,W表示1)
思路:由(n,m)到(1,1),发现不符合给出的矩阵就进行变换这样就是最优的了……
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define maxn 130
using namespace std;
int mp[130][130],mpc[130][130];
void change(int n,int m,int val)
{
for (int i=0;i<=n;i++)
for (int j=0;j<=m;j++)
{
mpc[i][j]+=val;
}
}
int main()
{
int n,m;
while (scanf("%d%d",&n,&m)!=EOF)
{
memset(mpc,0,sizeof(mpc));
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
{
char tem;
cin>>tem;
if (tem=='B') mp[i][j]=1;
else mp[i][j]=-1;
}
int res=0;
for (int i=n-1;i>=0;i--)
{
for (int j=m-1;j>=0;j--)
{
if (mp[i][j]!=mpc[i][j])
{
int d=mp[i][j]-mpc[i][j];
change(i,j,d);
res++;
}
}
}
printf("%d\n",res);
}
}