题目链接:

  Poj 3666 Making the Grade

题目描述:

  给出一组数,每个数代表当前位置的地面高度,问把路径修成非递增或者非递减,需要花费的最小代价?

解题思路:

  对于修好的路径的每个位置的高度肯定都是以前存在的高度,修好路后不会出现以前没有出现过得高度

  dp[i][j]代表位置i的地面高度为第j个高度,然后我们可以把以前的路修好后变成非递减路径,或者把以前的路径首尾颠倒,然后修成非递减路径。状态转移方程为:dp[i][j] = min(dp[i-1][k]) + a[i] - a[j];因为要把路径修成非递减路径,所以a[j]>a[k],所以我们要三重循环来搞,时间复杂度O(n^3)。如果我们对原来数列进行复制排序的话,a[j]>a[k]就转化为了j>k,这样就成功的把时间复杂度从O(n^3)降为O(n^2)。空间复杂度也可以用滚动数组从O(n^2)变为O(n)。

注意啦!注意啦!一定要用长整形,要不然会爆炸。用了长整形的话,取绝对值的时候就不能用abs了,只有手动实现或者用fabs咯。亲试······ce好几次(吐血~)

 #include<stdio.h>
#include <queue>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<algorithm> using namespace std;
typedef long long LL;
const LL maxn = ;
const LL INF = 0xfffffff;
LL dp[maxn][maxn];
//dp[i][j]第i个木棒,长度是j LL solve (LL a[], LL b[], LL n)
{
for (int i=; i<=n; i++)
dp[][i] = fabs (b[i] - a[]);
for (int i=; i<=n; i++)//第i个位置
{
LL Min = dp[i-][];
for (int j=; j<=n; j++)
{
Min = min (dp[i-][j], Min);
dp[i][j] = Min + fabs(a[i] - b[j]); }
}
LL Max = dp[n][];
for (int i=; i<=n; i++)
Max = min (Max, dp[n][i]);
return Max;
} int main ()
{
LL n, a[maxn], b[maxn];
while (scanf ("%lld", &n) != EOF)
{
for (int i=; i<=n; i++)
{
scanf ("%lld", &a[i]);
b[i] = a[i];
}
sort (b+, b+n+); LL ans = solve (a, b, n);
for (int i=, j=n; i<j; i++, j--)
swap (a[i], a[j]); ans = min (ans, solve(a, b, n));
printf ("%lld\n", ans);
}
return ;
}

Poj 3666 Making the Grade (排序+dp)的更多相关文章

  1. POJ - 3666 Making the Grade(dp+离散化)

    Description A straight dirt road connects two fields on FJ's farm, but it changes elevation more tha ...

  2. poj 3666 Making the Grade(dp离散化)

    Making the Grade Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7068   Accepted: 3265 ...

  3. poj 3666 Making the Grade(离散化+dp)

    Description A straight dirt road connects two fields on FJ's farm, but it changes elevation more tha ...

  4. POJ 3666 Making the Grade【DP】

    读题堪忧啊,敲完了才发现理解错了..理解题必须看样例啊!! 题目链接: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110495#pro ...

  5. POJ 3666 Making the Grade (DP)

    题意:输入N, 然后输入N个数,求最小的改动这些数使之成非严格递增即可,要是非严格递减,反过来再求一下就可以了. 析:并不会做,知道是DP,但就是不会,菜....d[i][j]表示前 i 个数中,最大 ...

  6. POJ 3666 Making the Grade (DP滚动数组)

    题意:农夫约翰想修一条尽量平缓的路,路的每一段海拔是A[i],修理后是B[i],花费|A[i] – B[i]|,求最小花费.(数据有问题,代码只是单调递增的情况) #include <stdio ...

  7. POJ 3666 Making the Grade(数列变成非降序/非升序数组的最小代价,dp)

    传送门: http://poj.org/problem?id=3666 Making the Grade Time Limit: 1000MS   Memory Limit: 65536K Total ...

  8. poj 3666 Making the Grade(dp)

    Description A straight dirt road connects two fields on FJ's farm, but it changes elevation more tha ...

  9. POJ 3666 Making the Grade(二维DP)

    题目链接:http://poj.org/problem?id=3666 题目大意:给出长度为n的整数数列,每次可以将一个数加1或者减1,最少要多少次可以将其变成单调不降或者单调不增(题目BUG,只能求 ...

随机推荐

  1. Spark 学习笔记:(四)MLlib基础

    MLlib:Machine Learning Library.主要内容包括: 数据类型 统计工具 summary statistics correlations stratified sampling ...

  2. scala快速学习笔记(一):变量函数,操作符,基本类型

    为了用spark,先学下scala. 参考教程:http://meetfp.com/zh/scala-basic doc查询:http://docs.scala-lang.org 其它资料:http: ...

  3. C++使用模板、函数指针、接口和lambda表达式这四种方法做回调函数的区别比较

    在C++中,两个类之间存在一种关系,某个类需要另外一个类去完成某一个功能,完成了之后需要告知该类结果,这种最普通最常见的需求,往往使用回调函数来解决. 如题,我总结下来有这么四种方式可以完成这项功能, ...

  4. ASHX入门教程

    新建web应用程序 其中添加的ashx包含ashx.CS 普通的web网站只包含ashx 新建webapplication应用 新建SampleHandler public class SampleH ...

  5. html5--6-56 阶段练习5-翻转效果

    html5--6-56 阶段练习5-翻转效果 学习要点 运用所学过的知识完成一个简单的小练习,理解对动画的应用. @charset="UTF-8"; *{ ; ; } img{ w ...

  6. CollapsingToolbarLayout 收缩显示tilte

    final CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id. ...

  7. HihoCoder1532 : 最美和弦(DP简单优化)

    描述 某个夜晚,Bob将他弹奏的钢琴曲录下来发给Jack,Jack感动之余决定用吉他为他伴奏. 我们可以用一个整数表示一个音符的音高,并可认为Bob弹奏的曲子是由3N个整数构成的一个序列.其中每个整数 ...

  8. DPI和PPI

    写在前面 各种手机测频机构或者相关资讯老是谈及一个概念:ppi和dpi,通常总会忽略,只是稍微明白,这参数越高,说明屏幕分辨率越高:很长时间都止步如此:但作为一个iOS开发者,岂能止步如此,万一别人问 ...

  9. 【旧文章搬运】Windows句柄分配算法(二)

    原文发表于百度空间,2009-04-04========================================================================== 在创建句柄 ...

  10. 未能加载文件或程序集“Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyT

    VS2008开发的网站,本地测试没问题,上传到服务器就出错,提示: 引用内容未能加载文件或程序集“Microsoft.ReportViewer.WebForms, Version=9.0.0.0, C ...