【dp】Making the Grade POJ - 3666
2017-08-11 09:14
381 查看
Think:
1知识点:dp+sort()快速排序
2状态转移方程
3思考:可通过滚动数组优化
以下为Accepted代码
1知识点:dp+sort()快速排序
2状态转移方程
dp[i][j]:i个数以b[j]作为第i个数的当前状态最优解; dp[i][j] = abs(a[i]-b[j]) + min(dp[i-1][k]) 1<=k<=n;
3思考:可通过滚动数组优化
以下为Accepted代码
#include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; const int inf = 0x3f3f3f3f; const int N = 2014; int a , b , dp ; /*dp[i][j]:i个数以b[j]作为第i个数的当前最优解*/ void solve(int n); int main(){ int n, i; while(~scanf("%d", &n)){ for(i = 1; i <= n; i++){ scanf("%d", &a[i]); b[i] = a[i]; } solve(n); } return 0; } void solve(int n){ sort(b+1, b+1+n); memset(dp, 0, sizeof(dp)); for(int i = 1; i <= n; i++){ int miv = dp[i-1][1]; for(int j = 1; j <= n; j++){ miv = min(miv, dp[i-1][j]); dp[i][j] = miv + abs(a[i]-b[j]); } } int ans = inf; for(int i = 1; i <= n; i++) ans = min(ans, dp [i]); printf("%d\n", ans); }
相关文章推荐
- DP:Making the Grade(POJ 3666)
- POJ3666 Making the Grade [DP,离散化]
- POJ - 3666 Making the Grade(DP)
- poj 3666 Making the Grade(dp离散化)
- POJ 3666 Making the Grade (DP)
- poj 3666 Making the Grade dp 离散化
- 【POJ 3666】Making the Grade(简单DP)
- poj 3666 Making the Grade (有序序列,离散化dp)
- POJ 3666 Making the Grade DP
- POJ 3666 Making the Grade dp + 离散化
- POJ 3666 Making the Grade——DP + 离散化
- poj 3666 Making the Grade 【dp】
- POJ 3666 Making the Grade(DP 推导)
- 【dp】POJ 3666 Making the Grade
- poj 3666 Making the Grade(dp)
- POJ 3666 Making the Grade [DP]
- POJ 3666-Making the Grade (DP+离散化)
- poj3666 Making the Grade dp
- [POJ 3666] Making the Grade (序列DP+离散化)
- POJ 3666 Making the Grade (dp, 数据结构[左偏树, 划分树, 函数式线段树等])