/ Vijos / 题库 / 配对 /

题解

17 条题解

  • 0
    @ 2010-03-17 09:22:41

    你的就是最优的思想了..

  • 0
    @ 2009-10-26 21:35:58

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 25ms

    ├ 测试数据 06:答案正确... 9ms

    ├ 测试数据 07:答案正确... 25ms

    ├ 测试数据 08:答案正确... 25ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 41ms

    先排个序,再讨论每个数前3个(包括这个数)可能的情况,可以用搜索。。

  • 0
    @ 2009-09-01 12:40:56

    首先,容易证明,对于A和C,以及B和D,|A-B|+|C-D|取得最小值仅当A>C且B>D时成立(本题题意要求没有等号)。这就是说两个序列尽量按降序对应才能得到最小值,亦即对于AD,可以通过交换A,C使得结果变小。

    因此第一步当然是对两个序列进行降序排序。此时就有a[1]>a[2]>a[3]>...>a[n],b[1]>b[2]>b[3]>...>b[n]。现在问题就可以转化成固定a序列,交换b序列中的一些元素,使得满足题意(即找到一种决策,将a[i]=b[i]的b[i]与其相邻的b[k]交换来使得绝对值和最小)。首先排除边界情况,看一般的i。

    若有a[i]!=b[i]则直接计算|a[i]-b[i]|;若a[i]==b[i],那么我们有如下决策:

    1.交换b[i]与此时i-1对应的b元素;2.交换b[i]与b;3.交换(b,b),交换b[i]与此时的b,即使最后顺序是b,b[i],b.可以证明,这几种决策囊括了所有决策。

    但是,问题来了,第一种决策要依赖b的取值。观察我们的决策并且结合引理,易知b可能取的只能是b,b,b。若b=b,那么交换b[i]与b一定不是最优决策。因为此时b与b或b是逆序,总可以找到一个能与b交换使得和更小。那么,我们可以用f(0,x)表示当前为b[x],前一个为b[x-1]的最优解,f(1,x)表示...为b[x-2]的...,f(2,x)表示...为b[x-2]的最优解。

    综上,有状态转移方程:

    1,a[i]==b[i]

    f(0,i)=min{abs(a-b[i])+f(i,i+1),abs(a-b)+abs(a[i]-b)+abs(a-b[i])+f(1,i+3),abs(a-b)+abs(a[i]-b)+f(1,i+2)};

    f(1,i)=min{abs(a-b[i])+f(2,i+1),abs(a-b)+abs(a[i]-b)+f(1,i+2),abs(a-b)+abs(a[i]-b)+abs(a-b[i])+f(1,i+3)};

    f(2,i)=abs(a-b)+abs(a[i]-b)+f(1,i+2);

    2,a[i]!=b[i]

    f(0,i)=abs(a-b)+f(0,i+1);

    f(1,i)=abs(a-b)+f(0,i+1);

    f(2,i)=abs(a-b)+f(0,i+1);

    这样就不会超时了。但是一定注意边界条件!为了这个我WA了N个。。。

    表达能力有限,见谅。

    另外,神牛们不要光顾着AC啊,也说说简单方法啊!!

  • 0
    @ 2009-07-27 10:35:25

    Orz cgy

    较优化思想

    应该是可以证明正确性的

  • 0
    @ 2009-07-08 20:53:27

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 166ms

    ├ 测试数据 06:答案正确... 150ms

    ├ 测试数据 07:答案正确... 119ms

    ├ 测试数据 08:答案正确... 103ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 166ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:704ms

    Orz cgy4ever!

    写了个状压DP。。手感好了很多。

    要用int64。

  • 0
    @ 2009-06-10 19:44:02

    在cgy大牛的指点下A了~

    注意变量范围啊~

  • 0
    @ 2009-06-12 12:46:08

    不懂。不解。在大牛的指点下A了,尽管自己也不懂。

  • 0
    @ 2009-06-04 18:20:38

    写了个并没有证明正确性但是AC了的DP

    我开始写的DP挂在样例上了,然后就加了一种配对方法.

    样例很有启示.

    ps:数据是10w要用scanf...又直接打的cin,TLE了一回..

  • 0
    @ 2009-05-07 17:41:44

    乱搞吧......

  • 0
    @ 2009-04-28 18:05:49

    谁解释一下DP?

  • 0
    @ 2009-04-14 12:36:53

    哥们

    左偏树 是堆耶

  • 0
    @ 2009-04-13 09:56:13

    依我所见:

    本题可用DP或者是匈牙利算法(二分图匹配)。

    不知想法对不对,请大牛赐教.谢了!!!

    了解了匈牙利算法(二分图匹配)不行,边存不下

  • 0
    @ 2009-04-10 18:58:24

    左偏树?

  • 0
    @ 2009-04-07 21:37:19

    首先,快排一下

    然后.............

    还没想出来~

  • 0
    @ 2009-04-15 20:42:27

    居然稀里糊涂地过了!

    我先快排,然后dp

  • 0
    @ 2009-04-05 20:03:50

    KM???

  • 0
    @ 2009-04-03 19:05:28

    用DP做可否?

  • 1

信息

ID
1530
难度
7
分类
动态规划 点击显示
标签
递交数
358
已通过
67
通过率
19%
被复制
2
上传者