/ Vijos / 题库 / 旅行 /

题解

50 条题解

  • 0
    @ 2009-08-18 23:47:28

    abs.....忘了写....

  • 0
    @ 2009-08-18 17:56:54

    真的是贪心啊

    DP肯定要TLE

  • 0
    @ 2009-08-17 20:20:41

    额,郁闷,代码打错,爆了0,T T

  • 0
    @ 2009-08-17 17:57:03

    这个题目贪心证明我是这么想的

    设改变后数列一段为a,a,a-k,a-k,a+m,a+m,这样改成a,a,a,a,a+m,a+m代价一样

    如果中间a-k段长度大于2,那么后者代价比前者大

    所以前者一定是一个最优序列

    又贪心方法一定只能造成如前所述序列,所以全数列最优

  • 0
    @ 2009-08-17 16:10:09

    如果某个 a_i 比两边都高或都低,就修改它,使之和某一边一样高

    Vijos C++ 用的是 MinGW G++ 吧

    long long 格式化字符串为 %I64d,%lld 似乎就当作 %ld 处理

  • 0
    @ 2009-08-17 11:49:49

    看我最短的C++程序

    #include

    #include

    long long a[100000+10],ans=0;

    int i,n;

    int main(){

    std::cin>>n;

    for(i=1;i>a[i];

    for(i=2;ia && a[i]>a)ans+=a[i],ans-=a[i]=a>?a;

    if(a[i]

  • 0
    @ 2009-08-17 10:27:26

    “其实这题很简单”——From 姜碧野大牛

    以下非FROM姜碧野大牛:

    首先两头的不管,因为你怎样移动都不会小于最优值。

    所以冲中间作

    因为一个数如果大于旁边俩数的最大值,或小于最小值,这样耗费的体力会比最优值大

    但因为符合最优值的数是在一个区间中,所以为了移动所耗的体力最小

    所以就要把数赋成区间的边界值。但如果数本身就在区间里头就不用管。

    为什么会保证全数列最优呢?

    答:假设A改变了,那A肯定是不用改变或者变成与A相等的

    这个定论不难证明,想一想就会明白。所以A会保证在A~A

    这个区间里头。

    因此,这种贪心方法可以贪出一种最优方法,进而能得出最优解。。。

    //路人甲:boyzkk大牛真神奇,人品爆发了,一撞撞对。。。⊙﹏⊙b汗

  • 0
    @ 2009-08-17 10:11:28

    C/C++用printf输出的要用%I64d而不是%lld,不然40分..

  • 0
    @ 2009-08-17 09:53:48

    考试的时候倒着做。。结果最后一题还是拿了个0分。。第一题没交。。

  • 0
    @ 2009-08-17 09:52:50

    3ci

  • 0
    @ 2009-08-17 09:07:46

    杯具...

  • 0
    @ 2009-08-17 09:07:07

    终于A了!!!

  • 0
    @ 2009-08-17 08:53:38

    哭啊!考试时没做这题!!想到了方法,没去做!!!!

  • 0
    @ 2009-08-17 08:52:27

    浪费Rp啊,居然把min和max写反了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

  • 0
    @ 2009-08-17 08:51:14

    我最不擅长贪心……

  • 0
    @ 2009-08-17 08:15:55

    悲剧啊,longint不行,只过3个点,要改int64

  • 0
    @ 2009-08-17 08:15:00

    比赛时胡乱的想了一个3个相邻的数的方法, 匆匆交上...没想到AC...

  • 0
    @ 2009-08-17 08:03:27

    max打成了min....

  • 0
    @ 2009-08-17 07:28:20

    第80个提交!

    第39个AC!

    庆祝一下!

    方法见lx!

  • 0
    @ 2009-08-17 01:28:47

    原来AC的方法就是这样做的。

    害得我比赛时,想到了却不敢这么做。

    RP不足,信心也不足啦!

    现在一次就AC了。(=@__@=)

    不难证明,相邻3个数,若中间的高于两边的(例如:a,a+5,a),它们做差的绝对值相加就是10.而先把它削矮至a,本来要加两次的5,只要一次性加入结果,而再次做差的绝对值相加就为0.(两边不相等,就取差的绝对值小的那个)若中间的低于两边的也是同理。若中间的介于两边之间,不难发现结果就是两边数的差的绝对值,若改变高度,这个值不变,还要再多加改变量的部分(白费功夫~(≧▽≦)/~啦啦啦)。

    只是为什么能保证在整一列数上来说,也是最优的,我就还没想通……

信息

ID
1615
难度
5
分类
贪心 点击显示
标签
递交数
1979
已通过
755
通过率
38%
被复制
2
上传者