UVa 10502【dp】
题意:给定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】的更多相关文章
- UVA 3882【dp】【简单数学】
题意: 给定三个数分别是: 人数 间隔 起点 题目中人的编号从1开始.在进行约瑟夫环的判定之后,求解最后能够活下来的人. 思路: 约瑟夫环的递推公式是 f[n]=(f[n-1]+jian ...
- Kattis - honey【DP】
Kattis - honey[DP] 题意 有一只蜜蜂,在它的蜂房当中,蜂房是正六边形的,然后它要出去,但是它只能走N步,第N步的时候要回到起点,给出N, 求方案总数 思路 用DP 因为N == 14 ...
- HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】
HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...
- HDOJ 1501 Zipper 【DP】【DFS+剪枝】
HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- HDOJ 1257 最少拦截系统 【DP】
HDOJ 1257 最少拦截系统 [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDOJ 1159 Common Subsequence【DP】
HDOJ 1159 Common Subsequence[DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- HDOJ_1087_Super Jumping! Jumping! Jumping! 【DP】
HDOJ_1087_Super Jumping! Jumping! Jumping! [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- POJ_2533 Longest Ordered Subsequence【DP】【最长上升子序列】
POJ_2533 Longest Ordered Subsequence[DP][最长递增子序列] Longest Ordered Subsequence Time Limit: 2000MS Mem ...
- HackerRank - common-child【DP】
HackerRank - common-child[DP] 题意 给出两串长度相等的字符串,找出他们的最长公共子序列e 思路 字符串版的LCS AC代码 #include <iostream&g ...
随机推荐
- 09安装运行redis-trib.rb所需的环境
运行redis-trib.rb脚本配置Redis的cluster,需要安装ruby环境,这里采用源码安装: 1:下载源码包: https://cache.ruby-lang.org/pub/ruby/ ...
- 用JetBrains PyCharm 2017.2创建运行Django程序
在JetBrains PyCharm 2017.2里选择 文件(F) 新项目 点击 三角形 运行 修改Urls.py """S14Djngo URL Configur ...
- HDU 4584
//也是简单题,因为n太小,故暴力之! #include<stdio.h> #include<math.h> #include<string.h> #define ...
- mysql8.0 的坑 hibernate连接配置坑
https://blog.csdn.net/qq_36448800/article/details/81180881 这篇文章对于连接配置说的是对的,也比较全面
- org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.hs.model.StudentModel]: No default constructor found; nested exception is java.lang.NoSuchMethodException: c
root cause org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [c ...
- VUE.之安装 font-awesome
VUE.之安装 font-awesome 我们在项目中经常使用各种图标:font-awesome (http://fontawesome.dashgame.com/) 1.npm 安装font-awe ...
- 2019.9.24 csp-s模拟测试51(a) 反思总结
T1:还在头铁,顺便复习了一下lct[虽然这题用不上因为复杂度不对] 头铁结束. 虽然题目存在换根的操作,实际上并不用真的换根. 2操作中求lca的时候只要考虑原树上root和x.y的lca以及x,y ...
- java-多线程的入门_进阶总结
多线程 概述图 1.概述 进程:正在执行中的程序,其实时应用程序在内存中运行的那片空间. 线程:进程中的一个执行单元,负责进程中的程序的运行,一个进程中至少要有一个线程. (进程可以理解为是一个QQ程 ...
- VI/VIM编辑器快捷键
常用快捷键: Ctrl+f 向下翻页 Ctrl+b 向上翻页 G 移动到文件最后一行 gg 移动到文件第一行 N+回车 ...
- 洛谷P1082 同余方程 [2012NOIP提高组D2T1] [2017年6月计划 数论06]
P1082 同余方程 题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输 ...