poj3666(离散思想,lis,dp)
2016-09-16 21:45
344 查看
/* translation: 给出一列数列,问把这列数列变成非递增或者非递减的最小代价是多少。代价公式如下: |A1 - B1| + |A2 - B2| + ... + |AN - BN |。 solution: dp, lis, 离散化 每个数要增加多少的量是不确定的,也就是有无穷种可能。但仔细考虑,要使得代价最少,增加后的量肯定 是原来的数列当中的数。因此先把原来数列排序。在用lis方法解决 note: date: 2016.9.8 */ #include <iostream> #include <cstdio> #include <algorithm> #define Abs(a) ((a) > 0 ? (a) : -(a)) using namespace std; const int maxn = 2000 +5; const long long INF = 1e60; long long dp[maxn][maxn]; //前i个,最后一个高度为b[j]的最优解 int a[maxn], b[maxn], n; int main() { //freopen("in.txt", "r", stdin); while(~scanf("%d", &n)) { for(int i = 0; i < n; i++) { scanf("%d", &a[i]); b[i] = a[i]; } sort(b, b + n); for(int i = 0; i < n; i++) dp[0][b[i]] = 0; long long t; for(int i = 1; i < n; i++) { t = INF; for(int j = 0; j < n; j++) { t = min(t, dp[i - 1][j]); dp[i][j] = Abs(a[i] - b[j]) + t; } } long long ans = INF; for(int i = 0; i < n; i++) ans = min(ans, dp[n - 1][i]); printf("%lld\n", ans); } return 0; }
相关文章推荐
- 【HDU 1069 】Monkey and Banana 【 求LIS的思想 DP 】
- POJ3666 离散化的dp
- HDUOJ 1025 - ConstructingRoadsInJGShining'sKingdom(DP:最长递增子序列LIS【nlogn算法】)
- HDU 1069 Monkey and Banana DP LIS
- 滚动数组算法 --- DP思想(动态规划)
- 分层图最短路(DP思想) BZOJ2662 [BeiJing wc2012]冻结
- HDU 6199(DP)补题+一个超级有用的滚动数组思想
- [DP-LIS] HDU 1160
- hdu 1506 dp思想的应用
- Codeforces 582B Once Again...【思维YY+Dp(LIS)】好题~
- hdu 4352 数位dp+nlogn的LIS
- 一道状态压缩DP思想题
- 【HDU4630 No Pain No Game】 dp思想+线段树的离线操作
- [DP_LIS] UVA10635
- light oj 1281 - New Traffic System (最短路+dp思想)
- 【HDU 1058 & HDU 3199 类似丑数】 简单DP思想
- HDU4352 lis+状压+数位dp
- Codeforces #345 div1 D. Zip-line LIS dp
- 【DP】HDU1950 Bridging signals——LIS最大上升子序列算法
- POJ 2533 Longest Ordered Subsequence DP(LIS)