hdu 5079 Square
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
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.
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.
inclusive, output the answer in a single line.
3
oo*
ooo
***
8
oooooooo
oooooooo
oooooooo
oooooooo
oooooooo
oooooooo
oooooooo
oooooooo
29
2
0
1
401415247
525424814
78647876
661184312
550223786
365317939
130046
1
hdu 5079 Square的更多相关文章
- hdu 1398 Square Coins 分钱币问题
Square Coins Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
- 题解报告:hdu 1398 Square Coins(母函数或dp)
Problem Description People in Silverland use square coins. Not only they have square shapes but also ...
- hdu 1398 Square Coins (母函数)
Square Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- hdu 1398 Square Coins(简单dp)
Square Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Pro ...
- hdu 1398 Square Coins(生成函数,完全背包)
pid=1398">链接:hdu 1398 题意:有17种货币,面额分别为i*i(1<=i<=17),都为无限张. 给定一个值n(n<=300),求用上述货币能使价值 ...
- HDU 1518 Square 搜索
Problem Description Given a set of sticks of various lengths, is it possible to join them end-to-end ...
- HDU 1518 Square(DFS)
Problem Description Given a set of sticks of various lengths, is it possible to join them end-to-end ...
- HDU 1398 Square Coins 整数拆分变形 母函数
欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) Square Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit ...
- hdu 1518 Square(深搜+剪枝)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1518 题目大意:根据题目所给的几条边,来判断是否能构成正方形,一个很好的深搜应用,注意剪枝,以防超时! ...
随机推荐
- win10+anaconda3+python3.6+opencv3.1.0
最近用windows系统比较多,就想在win10下搞一下深度学习这一方面的研究,那么就需要配置好环境巴拉巴拉的一堆东西.默默记个笔记,正所谓“好记性不如烂笔头”. 1.安装Anaconda 这个是一个 ...
- if 判断文件
#!/bin/sh#判断文件存在,判断是否为文件夹等testPath="/Volumes/MacBookProHD/Mr.Wen/08 shell命令"testFile=" ...
- LeetCode-51.N皇后
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案. 每一种解 ...
- 红黑树的删除详解与思路分析——不同于教科书上的算法(dart语言实现)
对于红黑树的删除,看了数据结构的书,也看了很多网上的讲解和实现,但都不满意.很多讲解都是囫囵吞枣,知其然,不知其所以然,讲的晦涩难懂. 红黑树是平衡二叉树的一种,其删除算法是比较复杂的,因为删除后还要 ...
- 关于运行“基于极限学习机ELM的人脸识别程序”代码犯下的一些错误
代码来源 基于极限学习机ELM的人脸识别程序 感谢文章主的分享 我的环境是 win10 anaconda Command line client (version 1.6.5)(conda 4.3.3 ...
- PHP学习 函数 function
参数默认值function drink($kind ='tea'){echo 'would you please a cup'.$kind.'<br>';} drink();drink(' ...
- Substrings (C++ find函数应用)
Description You are given a number of case-sensitive strings of alphabetic characters, find the larg ...
- This is me
This is me 爱琴棋 爱书画 也爱格物 爱跋山 爱涉水 也爱深林 This is me. 刘伯承的诗词有曰“高耸入云”,于是“李入云”便成为了我一生的标记,也造就了一个时而安静,时而疯狂的我 ...
- PAT 1001. A+B Format 解题
GitHub PDF 1001. A+B Format (20) Calculate a + b and output the sum in standard format -- that is, t ...
- Resharper简单安装及代码覆盖率的测试
Resharper简单安装及代码覆盖率的测试 测试环境:VS 2015 专业版 一.下载Resharper 官方链接:https://www.jetbrains.com/resharper/ 点击下载 ...