http://acm.hdu.edu.cn/showproblem.php?pid=5079

题意:

n*n网格,每个格子可以涂黑色或白色,有的格子必须涂黑色

问最大白色正方形边长分别为0,1,2,……n 的涂色方案数

令ans[i]表示最大白色正方形边长小于i的方案数

最大边长=i 的就是ans[i+1]-ans[i]

枚举sz,表示现在要求最大白色正方形边长<i的方案数

设dp[i][st] 表示前i行,状态为st的方案数

st内压缩了n-sz+1个数,其中的第j个数表示 从右往左数第j列,第j+1列,…… 第j+sz-1列 中,自第i行向上延伸的连续白色正方形数量的 最小值

要st中的每个数<sz,>=sz 就不是要求的最大边长<i

转移:

先枚举求到了第i行,枚举上一行的状态st

枚举本行有哪些格子要涂成白色,假设st的第j个数为f[j]

那么 如果本行从右往左数 第j列,第j+1列……第j+sz-1列 都涂了白色,new_f[j]=f[j]+1

只要有一个不是白色,那new_f[j]=0

new_f[j]压缩成 要转移到的状态 new_st

dp[i][new_st]+=dp[i-1][st]

所有的dp[n][] 累积就是ans[sz]

#include<cmath>
#include<cstdio>
#include<cstring> using namespace std; const int mod=1e9+; char s[];
int broken[]; int bit[]; int f[][];
int ans[]; int main()
{
int T;
scanf("%d",&T);
int n,m;
int tot;
while(T--)
{
scanf("%d",&n);
tot=;
for(int i=;i<=n;++i)
{
scanf("%s",s+);
broken[i]=;
for(int j=;j<=n;++j)
if(s[j]=='*') broken[i]|=<<j-;
else tot<<=,tot-=tot>=mod ? mod : ;
}
ans[]=; ans[n+]=tot;
for(int sz=;sz<=n;++sz)
{
memset(f,,sizeof(f));
f[][]=;
bit[]=;
for(int i=;i<n;++i) bit[i]=bit[i-]*sz;
m=;
for(int i=;i+sz-<=n;++i) m=m*sz+sz-;
for(int i=;i<=n;++i)
for(int st=;st<=m;++st)
if(f[i-][st])
for(int j=;j<<<n;++j)
if(!(broken[i]&j))
{
int nxt=;
for(int tmp=j,l=;l+sz-<=n;++l,tmp>>=)
{
int now=(tmp&((<<sz)-))==((<<sz)-) ? st/bit[l-]%sz+ : ;
if(now>=sz) { nxt=-; break; }
nxt+=now*bit[l-];
}
if(nxt!=-)
{
f[i][nxt]+=f[i-][st];
f[i][nxt]-=f[i][nxt]>=mod ? mod : ;
}
}
ans[sz]=;
for(int st=;st<=m;++st)
{
ans[sz]+=f[n][st];
ans[sz]-=ans[sz]>=mod ? mod : ;
}
}
for(int i=;i<=n;++i) printf("%d\n",(ans[i+]-ans[i]+mod)%mod);
}
return ;
}

Square

Time Limit: 24000/12000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 307    Accepted Submission(s):
207

Problem Description
Nothing is more beautiful than square! So, given a grid
of cells, each cell being black or white, it is reasonable to evaluate this
grid’s beautifulness by the side length of its maximum continuous subsquare
which fully consists of white cells.

Now you’re given an N × N grid, and
the cells are all black. You can paint some cells white. But other cells are
broken in the sense that they cannot be paint white. For each integer i between
0 and N inclusive, you want to find the number of different painting schemes
such that the beautifulness is exactly i. Two painting schemes are considered
different if and only if some cells have different colors. Painting nothing is
considered to be a scheme.


For example, N = 3 and
there are 4 broken cells as shouwn in Fig. J(a). There are 2 painting schemes
for i=2 as shown in Fig. J(b) and J(c).

You just need to output the
answer modulo 109 + 7.

 
Input
The first line contains an integer T (T ≤ 10) denoting
the number of the test cases.

For each test case, the first line contains
an integer N (1 ≤ N ≤ 8), denoting the size of the grid is N × N . Then N lines
follow, each line containing an N-character string of “o” and “*”, where “o”
stands for a paintable cell and “*” for a broken cell.

 
Output
For each test case, for each integer i between 0 and N
inclusive, output the answer in a single line.
 
Sample Input
2
3
oo*
ooo
***
8
oooooooo
oooooooo
oooooooo
oooooooo
oooooooo
oooooooo
oooooooo
oooooooo
 
Sample Output
1
29
2
0
1
401415247
525424814
78647876
661184312
550223786
365317939
130046
1

最新文章

  1. 云计算之路-阿里云上:消灭“黑色n秒”第三招——禁用网卡的TCP/IP Offload
  2. EasyUI combotree值的设置 setValue
  3. js判断当前操作系统
  4. NetWare
  5. 关于索引删除的策略IndexDeletionPolicy
  6. git中添加多个SSH公钥,以及不同系统之间的差别
  7. Response.Flush()
  8. oracle实用基础
  9. Spring 中 SQL 的存储过程
  10. centos7与centos6命令区别
  11. centos7常用命令
  12. Vue(十五)组件
  13. Asp.net:上传文件超过了最大请求长度
  14. linux arm 交叉编译ACE(ubuntu16.04)
  15. Vim settings file on Windows
  16. Codeforces914G Sum the Fibonacci(FWT)
  17. bugfree 数据库配置 显示No such file or directory
  18. python中字符串连接的四种方式
  19. java网络爬虫实现信息的抓取
  20. hello Groovy

热门文章

  1. storm从入门到放弃(三),放弃使用 StreamId 特性
  2. OD之绕过序列号验证(二)
  3. 用HackRF和Gqrx来听FM广播
  4. git 和 github 链接
  5. C++:多态浅析
  6. 实训三(cocos2dx 3.x 打包apk)
  7. A Zero Flow Entry Expiration Timeout P4 Switch
  8. synchronized、Lock、ReentrantLock、ReadWriteLock
  9. 在laravel中,使用DB查询数据库后,返回的对象,可以用下面的办法变为数组
  10. WP-PostViews使用