uva 10502

题意:给定01矩阵,求有多少个由1构成的矩阵。1本事也算一个矩阵。

  到最后还是想不出来。。。。。

  每次枚举两行,从第i行到第j行,k枚举矩阵的宽(column)。这样就相当于每次看看每列i到j行之间是否全是1,是就累加tot,不是就tot置零。比如现在i=1,j=3,前k=3列为:

     i=1   1 1 1

           1 1 1

     j=3   1 1 1

这时相当于竖着的长条都是1,所以k=1时,sum[1]=3,(因为当j=2、1时,sum的值已经计算过了,到这里由于值为1再加一下就是3了,也可以看成类似求竖着的largest empty interval),tot++,ans+=tot;k=2时,sum[2]=3,tot++,ans+=tot...

这样算出来此时状态下ans=1+2+3=6.(把话说明白好难)

参考代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN = ;
int maps[MAXN][MAXN];
int sum[MAXN];
char s[MAXN];
int row, col; int main()
{
while (scanf("%d", &row) == , row)
{
scanf("%d", &col);
memset(sum, , sizeof(sum));
for (int i = ; i <= row; i++)
{
scanf("%s", s);
for (int j = ; j<col; j++) {
maps[i][j + ] = s[j] - '';
}
}
int ans = ;
for (int i = ; i <= row; i++)//从第i行开始
{
memset(sum, , sizeof(sum));//每次换i行时清空sum,因为第i行是基础,j行随它变动
for (int j = i; j <= row; j++)//到第j行
{
int tot = ;
for (int k = ; k <= col; k++)//依次枚举
{
sum[k] += maps[j][k];
if (sum[k] != j - i + ) tot = ;//如果连续长度不满足tot清零
else tot++;//否则累加
ans += tot;//记录结果
}
}
}
cout << ans << endl;
}
return ;
}

当然,也可以行列互换,看成第i列到第j列的长条。

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN = ;
int maps[MAXN][MAXN];
int sum[MAXN];
char s[MAXN];
int row, col; int main()
{
while (scanf("%d", &row) == , row)
{
scanf("%d", &col);
memset(sum, , sizeof(sum));
for (int i = ; i <= row; i++)
{
scanf("%s", s);
for (int j = ; j<col; j++) {
maps[i][j + ] = s[j] - '';
}
}
int ans = ;
for (int i = ; i <= col; i++)
{
memset(sum, , sizeof(sum));
for (int j = i; j <= col; j++)
{
int tot = ;
for (int k = ; k <= row; k++)
{
sum[k] += maps[k][j];
if (sum[k] != j - i + ) tot = ;
else tot++;
ans += tot;
}
}
}
cout << ans << endl;
}
return ;
}

i、j看成列

而且有一个非常有意思的性质,当矩阵是n*n且全是1时,答案就是前n个数的立方和。

UVa 10502【dp】的更多相关文章

  1. UVA 3882【dp】【简单数学】

    题意: 给定三个数分别是: 人数    间隔     起点 题目中人的编号从1开始.在进行约瑟夫环的判定之后,求解最后能够活下来的人. 思路: 约瑟夫环的递推公式是 f[n]=(f[n-1]+jian ...

  2. Kattis - honey【DP】

    Kattis - honey[DP] 题意 有一只蜜蜂,在它的蜂房当中,蜂房是正六边形的,然后它要出去,但是它只能走N步,第N步的时候要回到起点,给出N, 求方案总数 思路 用DP 因为N == 14 ...

  3. HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】

    HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...

  4. HDOJ 1501 Zipper 【DP】【DFS+剪枝】

    HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...

  5. HDOJ 1257 最少拦截系统 【DP】

    HDOJ 1257 最少拦截系统 [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...

  6. HDOJ 1159 Common Subsequence【DP】

    HDOJ 1159 Common Subsequence[DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...

  7. HDOJ_1087_Super Jumping! Jumping! Jumping! 【DP】

    HDOJ_1087_Super Jumping! Jumping! Jumping! [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...

  8. POJ_2533 Longest Ordered Subsequence【DP】【最长上升子序列】

    POJ_2533 Longest Ordered Subsequence[DP][最长递增子序列] Longest Ordered Subsequence Time Limit: 2000MS Mem ...

  9. HackerRank - common-child【DP】

    HackerRank - common-child[DP] 题意 给出两串长度相等的字符串,找出他们的最长公共子序列e 思路 字符串版的LCS AC代码 #include <iostream&g ...

随机推荐

  1. 洛谷P3298 泉

    时空限制 1000ms / 128MB 题目描述 作为光荣的济南泉历史研究小组中的一员,铭铭收集了历史上x个不同年份时不同泉区的水流指数,这个指数是一个小于. 2^30的非负整数.第i个年份时六个泉区 ...

  2. SSM1-Maven入门

    Maven项目管理工具 Svn eclipse   maven量级 1      Maven的简介 1.1    什么是maven 是apache下的一个开源项目,是纯java开发,并且只是用来管理j ...

  3. Java review-basic1

    1. Dependency Injection Answer: Any application is composed of many objects that collaborate with ea ...

  4. Java处理正则验证手机号-详解

    参考博客:https://www.cnblogs.com/wangzn/p/7212587.html https://www.cnblogs.com/go4mi/p/6426215.html pack ...

  5. 数据库完整性 ch.5

    数据库的完整性 是指 数据的正确性(correctness) 和 相容性 (compat-ability) 5.1 实体完整性 定义 对单属性码的说明有两种方法,一种是定义为表约束条件,一种是定义为列 ...

  6. 关系数据库(ch.2)

    2.1.1 关系 域 笛卡儿积 关系 candiate key 如果一组属性值可以唯一的标识一个元祖,但是他的子集不行,那么这是一个候选码 关系可以由三种类型 基本关系 查询关系 视图 为关系附加如下 ...

  7. 【CodeVS】1978 Fibonacci数列3

    1978 Fibonacci数列 3 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 青铜 Bronze 题目描述 Description 斐波纳契数列是这样的数列: f1 = 1 f ...

  8. 创建动态MSSQL数据库表的方法

    代码如下: ImportsSystem.Data ImportsSystem.Data.SqlClient PublicClassForm1 InheritsSystem.windows.Forms. ...

  9. node的源码安装

    Node.js 安装配置 本章节我们将向大家介绍在 Windows 和 Linux 上安装 Node.js 的方法. 本安装教程以 Node.js v4.4.3 LTS(长期支持版本)版本为例. No ...

  10. MongoDB 定位 oplog 必须全表扫描吗?

    MongoDB oplog (类似于 MySQL binlog) 记录数据库的所有修改操作,除了用于主备同步:oplog 还能玩出很多花样,比如 全量备份 + 增量备份所有的 oplog,就能实现 M ...