![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
南山小翁
活在当下,要有思想,每个人不是随随便便就能成功!
展开
-
poj1050 动态规划 求二维数组中子矩阵和的最大值
思路:将二维转化为一维一维思路:for(int i=1;i<=n;i++){ temp[i]=(tem[i-1]>0)?temp[i-1]:0+num[i]; if(Max<temp[i]) Max=temp[i];}答案: #include#includeint num[110][110];int dp[110];int temp[110];原创 2013-02-20 17:19:39 · 1338 阅读 · 0 评论 -
poj1458求最长公共子序列的长度
#include#includeint dp[400][400];//dp[i][j]代表str1中第i个字符,str2中第j个字符之间的最长公共子序列长度char str1[400],str2[400];int max(int a,int b){ return a>b?a:b;}int main(){ int i,j,le1,le2; while(scan原创 2013-02-20 19:27:36 · 390 阅读 · 0 评论 -
hdu1559 我要做的足够 强大
思路:给出了子矩阵的大小,然后查找所有子矩阵的值,找出一个最大的即可:#include#include#include#includeusing namespace std;const int maxn=1010;int m,n,x,y,T;int dp[maxn];int map[maxn][maxn];int main(){ int ans原创 2013-05-03 11:23:16 · 836 阅读 · 0 评论 -
hdu2830 我要做的足够 强大
思路:①首先,我们可以计算每一列中连续的和,例如:1011 1 0 1 11001 ﹥﹥ 2 0 0 2 0001 0 0 0 3 ②对每一行的数据从小到大进行排序,然后利用dp[i][j]*(行号+1)查找一个最大值,即可,类似求面积。 #include#include#include原创 2013-05-04 08:09:24 · 692 阅读 · 0 评论 -
poj2559 我要做的足够 强大
思路:利用并查集的性质,然后找出最左边和最右边满足高度差的值,乘以高度 求解最大值 即可#include#include#include#include#includeusing namespace std;const int maxn=100010;long long height[maxn];long long dis[maxn];long long原创 2013-05-05 12:17:38 · 761 阅读 · 0 评论 -
poj3250 我要做的足够 强大
注意一点:当高度相同时,看不到前面的。#include#include#include#include#includeusing namespace std;const int maxn=80010;long long height[maxn];long long dis[maxn];int N;long long get_sum(int N){原创 2013-05-05 15:34:29 · 639 阅读 · 0 评论 -
poj1964 我要变的足够 强大
思路:对每一列中连续的F进行统计,模拟出一个统计表,用x轴做底,单位长度为1,高度记录的是连续F的个数,然后利用并查集的性质,在正常的高度范围内,找出最大的长度。 #include#include#include#include#includeusing namespace std;const int maxn=1010;int dis[maxn];原创 2013-05-05 11:49:18 · 808 阅读 · 0 评论 -
poj3494 连续区域最大矩形面积 我要做的足够 强大
#include#include#include#include#includeusing namespace std;const int maxn=2010;int N,M;int height[maxn];int dis[maxn];int ans;int max(int a,int b){ return a>b?a:b;}vo原创 2013-05-05 15:57:50 · 1008 阅读 · 0 评论