模板建站可以做优化吗抚顺建设银行网站
模板建站可以做优化吗,抚顺建设银行网站,page打开 wordpress,七个2wordpress正题
题目链接:https://www.luogu.org/problemnew/show/P3100 题目大意
一个空矩阵#xff0c;每次可以将B∗BB*BB∗B的矩阵覆盖为RRR或者BBB。
求BBB最大是多少使得可以覆盖使得原矩阵成为目标矩阵。 解题思路
我们考虑贪心#xff0c;先分析一下性质。
假设答案为kkk每次可以将B∗BB*BB∗B的矩阵覆盖为RRR或者BBB。
求BBB最大是多少使得可以覆盖使得原矩阵成为目标矩阵。 解题思路
我们考虑贪心先分析一下性质。
假设答案为kkk那么目标矩阵上必然有一个边长为kkk的同颜色正方形。当然考虑最优我们会让kkk越大越好。
我们可以每次寻找一个同颜色的最大正方形然后每次将这个正方形全都覆盖为两种颜色通用直到所有的都被覆盖每次取这个最大正方形的最小边长。
这时就有问题了我们如何用dpdpdp计算时保证这个正方形内必定有没有被覆盖的情况呢???其实我们可以用一个vi,jv_{i,j}vi,j表示以vvv为右下角的最大矩阵是否覆盖这样我们保证每次都找没有覆盖的情况就好了。
但是这是我们发现单单这样会TLETLETLE那我们只有限制一下运行次数就可以了因为若到后面基本发现不了更小的正方形。 codecodecode
#includecstdio
#includeiostream
#includealgorithm
using namespace std;
int n,m,f[110][110],x,y,ans,sum;
int a[110][110],k,g[110][110];
bool v[110][110];
void get_ans()
{sum0;for(int i1;in;i)for(int j1;jm;j){f[i][j]min(f[i-1][j-1],min(f[i-1][j],f[i][j-1]))1;g[i][j]min(g[i-1][j-1],min(g[i-1][j],g[i][j-1]))1;if(a[i][j]0) f[i][j]0;if(a[i][j]1) g[i][j]0;if(v[i][j]||max(f[i][j],g[i][j])sum) continue;summax(f[i][j],g[i][j]);xi;yj;}v[x][y]1;ansmin(ans,sum);for(int i0;isum;i)for(int j0;jsum;j){if(a[x-i][y-j]!3) k--;a[x-i][y-j]3;}
}
int main()
{scanf(%d%d,n,m);for(int i1;in;i)for(int j1;jm;j){char x;cinx;a[i][j](xR);}kn*m;ansn;for(int i1;i5000k;i) get_ans();printf(%d,ans);
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90299.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!