usaco Home on the Range(dp+容斥原理)

给一个二维的01矩阵,求边长为N,面积为N*N的正方形的个数,可以重合。

直接利用dp在数组sum[i][j]中存储下标从1-i,1-j的矩形的面积,然后枚举边长,和左上角的点统计就行了。

/*
ID: modengd1
PROG: range
LANG: C++
*/
#include <iostream>
#include <stdio.h>
#include <memory.h>

using namespace std;
int sum[251][251];
int N;
int ans[251];
int main()
{
    freopen("range.in","r",stdin);
    freopen("range.out","w",stdout);
    char ch;
    scanf("%d",&N);
    getchar();
    memset(sum,0,sizeof(sum));
    memset(ans,0,sizeof(ans));
    for(int i=1;i<=N;i++)
    {
        for(int j=1;j<=N;j++)
        {
            scanf("%c",&ch);
            sum[i][j]=sum[i-1][j]+sum[i][j-1]+(int)(ch-‘0‘)-sum[i-1][j-1];
        }
        getchar();
    }
    for(int k=2;k<=N;k++)
    {
        for(int i=1;i<=N-k+1;i++)
        {
            for(int j=1;j<=N-k+1;j++)
            {
                int area1=sum[i+k-1][j+k-1];
                int area2=sum[i+k-1][j-1];
                int area3=sum[i-1][j+k-1];
                int area4=sum[i-1][j-1];
                int area5=area1-area2-area3+area4;
                if(area5==k*k)
                    ans[k]++;
            }
        }
    }
    for(int i=2;i<=N;i++)
    {
        if(ans[i]!=0)
            cout<<i<<‘ ‘<<ans[i]<<endl;
    }
    return 0;
}

  

时间: 2024-10-13 22:29:27

usaco Home on the Range(dp+容斥原理)的相关文章

BZOJ 3622(已经没有什么好害怕的了-Dp+容斥原理)

3622: 已经没有什么好害怕的了 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 7  Solved: 6 [Submit][Status] Description Input Output Sample Input 4 2 5 35 15 45 40 20 10 30 Sample Output 4 HINT Source 2014湖北省队互测week2 PS:本题的数据中能量互不相同. 1.我们计算出糖果>药片的组数=k 2.我们计算出f[

【bzoj1042】[HAOI2008]硬币购物 背包dp+容斥原理

题目描述 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. 输入 第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s,其中di,s<=100000,tot<=1000 输出 每次的方法数 样例输入 1 2 5 10 2 3 2 3 1 10 1000 2 2 2 900 样例输出 4 27 题解 背包dp+容斥原理 考虑没有硬币个数限制,那么本题显然是完全

【bzoj2339】[HNOI2011]卡农 dp+容斥原理

题目描述 题解 dp+容斥原理 先考虑有序数列的个数,然后除以$m!$即为集合的个数. 设$f[i]$表示选出$i$个集合作为满足条件的有序数列的方案数. 直接求$f[i]$较为困难,考虑容斥,满足条件的有序数列的方案数=总方案数-不满足条件的方案数. 考虑如果前$i-1$个集合确定,那么第$i$个集合也一定确定,总方案数为$2^n-1$个满足条件的集合(不包括空集)中取出$i-1$个的排列$A_{2^n-1}^{i-1}$. 不满足条件的方案有两种: 1.根据前$i-1$个集合确定的第$i$个

洛谷 P2986 [USACO10MAR]Great Cow Gat…(树形dp+容斥原理)

P2986 [USACO10MAR]伟大的奶牛聚集Great Cow Gat… 题目描述 Bessie is planning the annual Great Cow Gathering for cows all across the country and, of course, she would like to choose the most convenient location for the gathering to take place. Each cow lives in on

【uoj#37/bzoj3812】[清华集训2014]主旋律 状压dp+容斥原理

题目描述 求一张有向图的强连通生成子图的数目对 $10^9+7$ 取模的结果. 题解 状压dp+容斥原理 设 $f[i]$ 表示点集 $i$ 强连通生成子图的数目,容易想到使用总方案数 $2^{sum[i]}$ 减去不为强连通图的方案数得到强连通图的方案数,其中 $sum[i]$ 表示点集 $i$ 中边的数目. 考虑什么样的图不是强连通图:缩点后入度为0的强连通分量对应的点集不是全集. 枚举这些入度为0的强连通分量对应的点集,由于无法保证只有这些点构成的入度为0的强连通分量,因此需要进一步容斥.

USACO--3.3Home on the Range+DP

二维dp,定义G[i][j]表示i,j为顶点的最大正方形边长.如果G[i][j]本身为1,则转移方程为:G[i][j]=min(G[i+1][j],G[i][j+1],G[i+1][j+1])+1.其实就是由其下方,右方,右下方的点确定它所能构成的最大正方形(在图上可以很清楚的发现这一点). 其实这道题也可以暴力枚举;我们枚举每个点作为正方形左上角顶点时可以得到的最大边长正方形,而边长为k的正方形和k+1的正方形之间是存在关系的. 代码如下: /* ID: 15674811 LANG: C++

Hdu 4336 Card Collector (状态概率DP|容斥原理)

详细的题目大意与解析大家参考一下kuangbin的文章. kuangbin链接 这边说一下自己对于kuangbin代码以及容斥原理位元素枚举的理解与解释,希望对大家有所帮助. 状态DP AC代码:状态压缩的思想我就不赘述了,我也只是略懂,这边仅仅分析一下状态方程 由于量比较多,我这边有的便用文字代替,有利于描述. dp[i]表示i状态达到满状态(即收集满n个物品,以下称满状态)所需要的期望. 那么i状态当中收集了x的物品,剩余n-x个物品没有收集 那么dp[i]=p*dp[i]+p2*dp[i2

【bzoj 4455】小星星(树型DP+容斥原理)

给一个n个点的图和一个n个点的树,求图和树上的点一一对应的方案数.(N<=17)思路:1.在树的结构上进行tree DP,f[i][j]表示树上点 i 对应图上点 j 时,这个点所在子树的方案数.O(n^3).2.我们可以发现如果按这个定义进行DP,“一一对应”的关系挺难保证.若枚举出全排列得到对应关系,这样就C(n,n)=n! 只能拿到暴力分:那么我们就不限制“一一对应”而改为“一对多”的关系进行tree DP,利用容斥原理达到O(2^n)的复杂度.(P.S.至于为什么用容斥原理我也不清楚,待

COGS130. [USACO Mar08] 游荡的奶牛[DP]

130. [USACO Mar08] 游荡的奶牛 ★☆   输入文件:ctravel.in   输出文件:ctravel.out   简单对比时间限制:1 s   内存限制:128 MB 奶牛们在被划分成N行M列(2 <= N <= 100; 2 <= M <= 100)的草地上游走,试图找到整块草地中最美味的牧草.Farmer John在某个时刻看见贝茜在位置(R1, C1),恰好T (0 < T <= 15)秒后,FJ又在位置(R2, C2)与贝茜撞了正着.FJ并不