SDUT 2171 - 上升子序列
2014-04-05 20:12
169 查看
传送门SDUT 2171 - 上升子序列
做的第一个DP问题.
觉得处理的方法很奇妙...
每次探索一个新的领域, 都会有种感慨: 这TM都是谁想出来的(╯‵□′)╯ ┴─┴
越来越觉得算法的神奇.
这题要从以一个数结尾的情况考虑最大递增子序列.
状态dp[i]表示以i结尾的递增子序列的和。
状态转移方程dp[i] = max(dp[j]) + data[i], 1 <= j < i, 且data[j] < data[i]
----------------------------------------------------------------------------------------------------------------
三个月后来一发,贴个记忆化搜索的。
dp[i]表示从i开始的最大值。
-----------------
做的第一个DP问题.
觉得处理的方法很奇妙...
每次探索一个新的领域, 都会有种感慨: 这TM都是谁想出来的(╯‵□′)╯ ┴─┴
越来越觉得算法的神奇.
这题要从以一个数结尾的情况考虑最大递增子序列.
状态dp[i]表示以i结尾的递增子序列的和。
状态转移方程dp[i] = max(dp[j]) + data[i], 1 <= j < i, 且data[j] < data[i]
----------------------------------------------------------------------------------------------------------------
三个月后来一发,贴个记忆化搜索的。
dp[i]表示从i开始的最大值。
#include <cstdio> int T; int dp[1005]; int data[1005]; using namespace std; int Sort() { int i; int max = -1; for ( i = 0; i < T; i++) { dp[i] = data[i]; for (int j = 0; j < i; j++) { if (data[i] > data[j] && dp[i] < dp[j] + data[i]) dp[i] = dp[j] + data[i]; } } for (i = 0; i < T; i++) if (dp[i] > max) max = dp[i]; return max; } int main() { //freopen("input.txt", "r", stdin); int i; while (scanf("%d", &T) == 1) { for (i = 0; i < T; i++) scanf("%d", &data[i]); printf("%d\n", Sort()); } return 0; }
-----------------
#include <bits/stdc++.h> using namespace std; const int MAXN = 1000 + 10; const int INF = 0x3f3f3f3f; int dp[MAXN], num[MAXN], n; int DFS(int k) { if (dp[k]) return dp[k]; int temp = 0, ans; for (int i = k + 1; i < n; i++) if (num[i] > num[k]) temp = max(temp, DFS(i)); ans = num[k] + temp; return dp[k] = ans; } int main() { //freopen("input.txt", "r", stdin); int i, j; while (~scanf("%d", &n)) { memset(dp, 0, sizeof dp); for (i = 0; i < n; i++) scanf("%d", &num[i]); int ans = -1; for (i = 0; i < n; i++) ans = max(DFS(i), ans); printf("%d\n", ans); } return 0; }
相关文章推荐
- SDUT 2171 上升子序列
- SDUT 2171 上升子序列
- SDUT 2171 上升子序列
- SDUT 1299 最长上升子序列
- sdut1299 最长上升子序列(动态规划)
- sdut 1299 最长上升子序列
- sdut 1299最长上升子序列
- sdut.acm 2012级《程序设计基础Ⅱ)》_动态规划 最长上升子序列
- SDUT 1299 最长上升子序列
- 2171上升子序列
- SDUT 1299----最长上升子序列
- SDUT_1299 最长上升子序列
- sdut 1299 最长上升子序列
- SDUt 2028 最长上升子序列
- sdut1299 最长上升子序列(dp入门)
- D. Babaei and Birthday Cake---cf629D(最长上升子序列和+线段树优化)
- [NYIST16]矩形嵌套(DP,最长上升子序列)
- hdu 1423(最长公共上升子序列)
- 最长连续上升子序列
- HDU 5773 最长上升子序列