zoukankan      html  css  js  c++  java
  • BZOJ 2101 DP+优化

    思路:

    http://www.cnblogs.com/exponent/archive/2011/08/14/2137849.html

    f[i,i+len]=sum[i,i+len]-min(f[i+1,i+len],f[i,i+len-1]);

    但题目把n出到5000,内存卡到64M,二维的状态存不下..

    其实,j这一维可以省掉.我们换个状态表示

    f[i,i+len]=sum[i,i+len]-min(f[i+1,i+len],f[i,i+len-1])

    然后循环这样写:

    for len=1 to n

       for i=1 to n-len.

    容易看出第二维可以省掉了.

       想了好久才懂...

    最一开始的DP都没想到TAT

    //By SiriusRen
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    const int N=5555;
    int n,a[N],sum[N],f[N];
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]),sum[i]=sum[i-1]+a[i];
        for(int l=0;l<=n;l++)
            for(int i=1;i+l<=n;i++)
                f[i]=sum[i+l]-sum[i-1]-min(f[i],f[i+1]);
        printf("%d
    ",f[1]);
    }
  • 相关阅读:
    C#中IDisposable学习
    C# volatile与lock
    TFS源代码管理
    C#如何获取真实IP地址
    c# 协变和逆变
    基本数据类型
    用户交互
    变量.常量
    输出语句,注释,
    基础知识随笔
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6592657.html
Copyright © 2011-2022 走看看