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 ...
随机推荐
- 循环读取文件夹中的图片matlab代码
参考:http://blog.csdn.net/guoxiaojie_415/article/details/21317323:http://blog.csdn.net/qikaihuting/art ...
- 转:Android检查设备是否联网
public static boolean isConnect(Context context) { ConnectivityManager connectionManager = (Connecti ...
- 作业-[luogu4396][AHOI2013]-莫队
<题面> 卡常终究比不上算法的优化…… 这是莫队的有点小坑的题, 首先不一定能想到,想到不一定打对,打对不一定打好. 首先你会发现,这个题的时限是很长的- $n$和$m$也是很大的. 于是 ...
- IO流10 --- 缓冲流(字节型)实现非文本文件的复制 --- 技术搬运工(尚硅谷)
字节型缓冲流,BufferedOutputStream默认缓冲区大小 8192字节byte,满了自动flush() @Test public void test6(){ File srcFile = ...
- iTerm2+oh-my-zsh配色
效果图,很帅气有木有 一.首先安装iTem2 安装好后的截图如下: 安装好后的截图 二.安装oh-my-zsh. sh -c "$(curl -fsSL https://raw.gi ...
- 计蒜客 Prefix Free Code(字典树+树状数组)
Consider n initial strings of lower case letters, where no initial string is a prefix of any other i ...
- 【CodeVS】1083 Cantor表
1083 Cantor表 1999年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 现代数学的著名证明之 ...
- 推荐一个 Laravel admin 后台管理插件
如何优雅的写代码,我想是每位程序员的心声.自从15年初第一次接触 Laravel 4.2 开始,我就迷上使用 Laravel 框架了.我一直都想找个时间好好写写有关 Laravel 的使用文章,由浅入 ...
- svn利用钩子脚本功能实现代码同步到web目录
一.hook简单介绍 为了方便管理员控制提交的过程 ,Subversion提供了hook机制.当特定的 事件发生时,相应的 hook会被调用,hook其实就相当于特定事件的处理函数.每个hook会得到 ...
- python中数字转换成字符串
数字转换成字符串: num=123 str='%d' %num str就变成了"123"