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. Leetcode173. Binary Search Tree Iterator二叉搜索树迭代器

    实现一个二叉搜索树迭代器.你将使用二叉搜索树的根节点初始化迭代器. 调用 next() 将返回二叉搜索树中的下一个最小的数. 注意: next() 和hasNext() 操作的时间复杂度是O(1),并 ...

  2. Leetcode109. Convert Sorted List to Binary Search Tree有序链表转换二叉搜索树

    给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定的有序链表: [-10 ...

  3. LUOGU P1779 魔鬼杀手_NOI导刊2010提高(03)

    传送门 解题思路 背包,首先先用aoe都打残然后单伤补刀,用f[i]表示AOE打了i的伤害的最小花费,g[i]表示单伤打了i的伤害的最小花费. 代码 #include<iostream> ...

  4. beego 入门 - 常见错误

    参考网址:http://beego.me/quickstart 按照官网教程,执行命令 $ go get github.com/astaxie/beego $ go get github.com/be ...

  5. Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---命令模式之SimpleRemoteWithUndoTest[转]

    命令模式可以很轻松的实现撤销(Undo)功能. 命令的接受者:  1unit uReceiveObject;  2  3interface  4  5type  6  TLight = class(T ...

  6. springmvc 支持对象与json 自动转换的配置

    基于maven的工程, 需要在pom.xml中添加如下依赖 <dependency> <groupId>javax.servlet</groupId> <ar ...

  7. linux-jdk-mysql-tomcat安装

    1.JDK安装 注意:rpm与软件相关命令 相当于window下的软件助手 管理软件 步骤: 1)查看当前Linux系统是否已经安装java 输入 rpm -qa | grep java 1)卸载两个 ...

  8. HDU3078 Network [2016年6月计划 树上问题05]

    Network Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  9. Vue2.0史上最全入坑教程(中)—— 脚手架代码详解

    书接上文我们说道,如何利用脚手架(vue-cli)构建一个vue项目,本回书我们一起来学习分析下代码. 回顾下创建后的项目目录:   说明:在*.vue文件,template标签里写html代码,且t ...

  10. Laravel访问出错错误信息:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or dire

    错误信息:`Warning: require(/http/www.mywakavLee.cn/bootstrap/../vendor/autoload.php): failed to open str ...