[luogu3392 涂国旗]

来源:互联网 发布:红辣椒电影数据分析 编辑:程序博客网 时间:2024/04/25 19:33

题目链接

题解:f[i][1]表示用1种颜色涂完i行费用

#include <iostream>#include <cstdio>using namespace std;#define INF 0x3f3f3f3fint n,m;int w[100],b[100],r[100];int f[100][4];char s[100][100];void init(){    cin>>n>>m;    for(int i=1;i<=n;i++)    scanf("%s",s[i]+1);}void work(){    for(int i=1;i<=n;i++)    for(int j=1;j<=m;j++)    {        if(s[i][j]=='W') w[i]++;        if(s[i][j]=='B') b[i]++;        if(s[i][j]=='R') r[i]++;    }}void dp(){    for(int i=1;i<=n;i++) f[i][1]=f[i][2]=f[i][3]=INF;//预处理    for(int i=1;i<=n;i++)    {        if(i<=n-2)        f[i][1]=f[i-1][1]+(m-w[i]);        if(i>=2&&i<=n-1)        f[i][2]=min(f[i-1][1],f[i-1][2])+(m-b[i]);        if(i>=3)//注意下转移的要求        f[i][3]=min(f[i-1][2],f[i-1][3])+(m-r[i]);    }    printf("%d\n",f[n][3]);}int main(){    init();    work();    dp();    return 0;} 
0 0
原创粉丝点击