【sdut】1309 不老的传说问题(简单环形区间DP)
2015-01-29 17:30
387 查看
题目大意:中文题就不赘述了。题目链接
题目思路:大致的处理是与HDU 2476 一个道理,只是加入环形的处理方式。
环形处理方法:将数组延长一倍。
AC代码:
题目思路:大致的处理是与HDU 2476 一个道理,只是加入环形的处理方式。
环形处理方法:将数组延长一倍。
AC代码:
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a[440]; int dp[440][440]; int main() { int n, c, k; while (cin >> n >> c >> k) { for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); a[i + n] = a[i]; } int l = 2 * n; for (int i = 1; i <= l; i++) for (int j = i; j <= l; j++) dp[i][j] = j-i+1; for (int len = 1; len < n; len++) for (int i = 1; i + len <= l; i++) { int j = i + len; dp[i][j] = dp[i][j - 1] + 1; if (a[i] == a[j] && j - i + 1 <= k) dp[i][j] = dp[i][j - 1]; for (int ll = i + 1; ll < j; ll++) if (a[ll] == a[j] && j - ll + 1 <= k) dp[i][j] = min(dp[i][j], dp[i][ll - 1] + dp[ll][j]); } int ans = 0x7ffffff; for (int i = 1; i <= n; i++) ans = min(ans, dp[i][i + n - 1]); cout << ans << endl; } }
相关文章推荐
- sdut1309 不老的传说问题(区间dp)
- sdut1309——不老的传说问题(区间DP)
- sdut 1309 不老的传说问题 区间dp 难
- sdut 1309 不老的传说问题(区间DP,难,值得好好看)
- SDUT 1309 不老的传说问题 (区间DP)
- sdut 1309 —— 不老的传说问题
- sdut 1309 不老的传说 区间dp(较难)
- Hrbust 1819 石子合并问题--圆形版【环形区间Dp】
- 经典问题三.【环形区间dp】 项链 nyoj 460
- Sdut1309不老传说(区间dp)
- 【区间DP】不老的传说(spring.cpp/pas)
- BNU1065:简单的问题(数位dp)
- poj 2955 Brackets(区间DP,经典问题)求有规律的括号的最大长度
- 【重新开工】SDUT 2074——区间覆盖问题
- UVA 11137 Ingenuous Cubrency 类似硬币问题的简单dp
- HDOJ1003 简单DP问题
- sdut 2168 Mathmen 优先队列处理区间问题
- 编程之美3.11扩展问题 简单并带有错误的环形单链表检测代码
- 简单DP之二维背包问题
- 简单DP之最少硬币问题(多重背包问…