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 题目大意:根据题目所给的几条边,来判断是否能构成正方形,一个很好的深搜应用,注意剪枝,以防超时! ...
随机推荐
- Tomcat 基础二
1.Tomcat 实现了一个新的Servlet容器Catalina: 2.Tomcat: ROOT | |____ / ...
- GIT版本控制工具总结
1.安装GIT 现在的Linux和Unix包括MAC有的已经自带git,没有自带git的话,在Debian或Ubuntu Linux系统下执行sudo apt-get install git或者sud ...
- linux chroot 命令
chroot,即 change root directory (更改 root 目录).在 linux 系统中,系统默认的目录结构都是以 /,即以根 (root) 开始的.而在使用 chroot 之后 ...
- [咸恩静][Love effect]
歌词来源:http://music.163.com/#/song?id=31877654 作曲 : Monster Factory/양승욱 [作曲 : Monster Factory/yang-seu ...
- PAT甲题题解-1007. Maximum Subsequence Sum (25)-求最大子区间和
题意:给出n个数,求最大连续的子区间和,并且输出该区间的第一个和最后一个数. 如果所有数都小于0,那么则输出0,第一个数和最后一个数. 看数据k的范围,就知道肯定不能两层for循环来求区间和,O(n^ ...
- JAVA每日一旅
1.关于final关键字 final修饰的成员变量为基本数据类型时,在赋值之后无法改变.当final修饰的成员变量为引用数据类型时,在赋值后其指向地址无法改变,但是对象内容还是可以改变的. final ...
- 第一个sprint与第二个sprint阶段总结
总体: 在第一个sprint中,团队里的小伙伴都在积极努力的配合,基本按照流程做了一次Sprint,大家一块进行计划会议,一块估计任务工时,但是还是有一些意外的事情,这段时间大家都没什么精力放在这门上 ...
- 基于 Java Web 的毕业设计选题管理平台--系统设计和任务分配
一.团队作业:http://www.yzhiliao.com/course/70/task/440/show 二.个人作业: 1.项目的代码托管 (1).GitHub 地址:https://githu ...
- Activiti随着Spring启动自动部署开关
Activiti的act_re_deployment表NAME_列:全部显示SpringAutoDeployment. 查阅Activiti,https://github.com/Activiti/A ...
- node之文件的下载
/** * 文件的下载 */ let express = require('express'); let app = express(); app.get('/',(req,res)=>{ re ...