题解

65 条题解

  • -1
    @ 2015-08-21 22:26:35

    记录信息
    评测状态 Accepted
    题目 P1202 Selection
    递交时间 2015-08-21 22:26:01
    代码语言 C++
    评测机 VijosEx
    消耗时间 185 ms
    消耗内存 16220 KiB
    评测时间 2015-08-21 22:26:02
    评测结果
    编译成功

    测试数据 #0: Accepted, time = 31 ms, mem = 16216 KiB, score = 20
    测试数据 #1: Accepted, time = 46 ms, mem = 16216 KiB, score = 20
    测试数据 #2: Accepted, time = 31 ms, mem = 16220 KiB, score = 20
    测试数据 #3: Accepted, time = 46 ms, mem = 16216 KiB, score = 20
    测试数据 #4: Accepted, time = 31 ms, mem = 16220 KiB, score = 20
    Accepted, time = 185 ms, mem = 16220 KiB, score = 100
    代码
    #include <iostream>
    #include <stdio.h>
    using namespace std;
    int f[2002][2002];
    int a[2002];
    int total[2002];
    int main()
    {
    int n,k;
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++)
    {
    scanf("%d",&a[i]);
    total[i]=total[i-1]+a[i];
    }
    for(int i=1;i<=n;i++)
    f[i][i]=a[i];
    for(int i=1;i<=n;i++)
    {
    for(int j=1;j+i<=n;j++)
    f[j][j+i]=total[j+i]-total[j-1]-min(f[j+1][j+i],f[j][j+i-1]);
    }
    if(k==1)
    printf("%d",f[1][n]);
    else
    printf("%d",total[n]-f[1][n]);
    }

  • -1
    @ 2015-08-03 10:28:55

    -3-

  • -1
    @ 2015-08-03 10:28:45

    1...1

  • -1
    @ 2014-10-28 21:53:14

    下标写错,过了n遍。。。。经典的动规啊。。。

  • -1
    @ 2013-11-04 22:16:45

    我觉得好无聊,楼下的一些题解,方程总是要下标省略了.
    我很奇怪,既然你不想给大家提供做题经验,那你还写什么题解?是为了秀一下自己有多少牛b?
    我不是那种人.
    很显然,这道题是一道博弈论.用DP求解即可
    f[i,j]表示i-j这个区间里最大的价值。
    f[i,j]:=max(a[i]+sum[i+1,j]-f[i+1,j],
    a[j]+sum[i,j-1]-f[i,j-1]);
    这是比较经典的方程。仔细思考。
    DP过后,f数组中存贮的肯定是最优状态。如果是1出手,则答案是f[i,j];相反则是sum[i,j]-f[i,j];

    DXE

    • @ 2014-01-10 19:25:51

      下标没了是vijos的错。。之前换2.0的bug

信息

ID
1202
难度
5
分类
动态规划 点击显示
标签
(无)
递交数
909
已通过
326
通过率
36%
被复制
4
上传者