
动态规划
南山小翁
活在当下,要有思想,每个人不是随随便便就能成功!
展开
-
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 #include int num[110][110]; int dp[110]; int temp[110];原创 2013-02-20 17:19:39 · 1376 阅读 · 0 评论 -
poj1458求最长公共子序列的长度
#include #include int 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 · 416 阅读 · 0 评论 -
hdu1559 我要做的足够 强大
思路:给出了子矩阵的大小,然后查找所有子矩阵的值,找出一个最大的即可: #include #include #include #include using 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 · 854 阅读 · 0 评论 -
hdu2830 我要做的足够 强大
思路:①首先,我们可以计算每一列中连续的和,例如: 1011 1 0 1 1 1001 ﹥﹥ 2 0 0 2 0001 0 0 0 3 ②对每一行的数据从小到大进行排序,然后利用dp[i][j]*(行号+1)查找一个最大值,即可,类似求面积。 #include #include #include原创 2013-05-04 08:09:24 · 721 阅读 · 0 评论 -
poj2559 我要做的足够 强大
思路:利用并查集的性质,然后找出最左边和最右边满足高度差的值,乘以高度 求解最大值 即可 #include #include #include #include #include using namespace std; const int maxn=100010; long long height[maxn]; long long dis[maxn]; long long原创 2013-05-05 12:17:38 · 783 阅读 · 0 评论 -
poj3250 我要做的足够 强大
注意一点:当高度相同时,看不到前面的。 #include #include #include #include #include using 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 · 666 阅读 · 0 评论 -
poj1964 我要变的足够 强大
思路:对每一列中连续的F进行统计,模拟出一个统计表,用x轴做底,单位长度为1,高度记录的是连续F的个数,然后利用并查集的性质,在正常的高度范围内,找出最大的长度。 #include #include #include #include #include using namespace std; const int maxn=1010; int dis[maxn];原创 2013-05-05 11:49:18 · 837 阅读 · 0 评论 -
poj3494 连续区域最大矩形面积 我要做的足够 强大
#include #include #include #include #include using 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 · 1036 阅读 · 0 评论