当前位置:   article > 正文

动态规划的基本模型

动态规划的基本模型

有数字三角形模型、LIS、LCS、走网格、最大子矩阵

1258 【例9.2】数字金字塔

数字三角形模型

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1005;

int a[N][N], dp[N][N];

int main(void)
{
	int r;
	cin >> r;
	for (int i = 1; i <= r; i++)
		for (int j = 1; j <= i; j++)
			cin >> a[i][j];
	for (int i = 1; i <= r; i++) 
		dp[i][1] = dp[i - 1][1] + a[i][1];
	
	for (int i = 1; i <= r; i++)
		dp[i][i] = dp[i - 1][i - 1] + a[i][i];
	
	for (int i = 3; i <= r; i++)
		for (int j = 2; j < i; j++)
			dp[i][j] = max(dp[i - 1][j - 1], dp[i - 1][j]) + a[i][j];
	
	int res = 0;
	for (int j = 1; j <= r; j++)
		res = max(res, dp[r][j]);
	cout << res << endl;
		
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

1259:【例9.3】求最长不下降序列

因为需要记录路径,我的办法是用一个数组来记录前驱,存入一个栈

#include <bits/stdc++.h>
using namespace std;
const int N = 205;

int arr[N], dp[N], pri[N]; // pri记录前驱 

int main(void)
{
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> arr[i];
		dp[i] = 1;
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j < i; j++) {
			// 记录前驱 
			if (arr[i] >= arr[j] && dp[i] < dp[j] + 1) {
				pri[i] = j;
				dp[i] = max(dp[i], dp[j] + 1);
			}
		}
	}
	int res = 0, st;
	for (int i = 1; i <= n; i++) {
		if (res < dp[i]) {
			st = i;
		}
		res = max(res, dp[i]);
	}
	cout << "max=" << res << endl;
	
	stack<int> stk;
	for (int i = st; i != 0; i = pri[i]) {
		stk.push(arr[i]);
	}
	while (stk.size()) {
		cout << stk.top() << " ";
		stk.pop();
	}
	cout << endl;
	
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

1260:【例9.4】拦截导弹(Noip1999)

注意最后会读入一个EOF,所以 n 需要减1

贪心的思路,一开始没想到

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/867746
推荐阅读
相关标签