zoukankan      html  css  js  c++  java
  • 洛谷1220关路灯

    题目:https://www.luogu.org/problemnew/show/P1220

    先要发现任一时刻已关的灯属于连续的区间(不会路过而不关灯)。

    精髓在于分类左端点和右端点。

    但没想清楚为何memset不行。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n,p,a[55];
    long long d[55][55][2],all,c[55];
    const int INF=0x7fffffff;
    long long sum(int a,int b)
    {
        long long s=0;
        for(int i=a;i<=b;i++)
            s+=c[i];
        return s;
    }
    long long mn(long long a,long long b)
    {
        if(a<b)return a;return b;
    }
    int main()
    {
        scanf("%d%d",&n,&p);
        for(int i=1;i<=n;i++)
        {
            scanf("%d%lld",&a[i],&c[i]);
            all+=c[i];
        }
    //    memset(d,INF,sizeof d);        不行 
        for(int i=1;i<=n;i++)d[i][i][0]=INF,d[i][i][1]=INF;
        d[p][p][0]=0;d[p][p][1]=0;
        for(int L=2;L<=n;L++)
            for(int i=1;i<=n-L+1;i++)
            {
                int j=i+L-1;
                d[i][j][0]=mn(d[i+1][j][0]+(a[i+1]-a[i])*(all-sum(i+1,j)),d[i+1][j][1]+(a[j]-a[i])*(all-sum(i+1,j)));
                d[i][j][1]=mn(d[i][j-1][1]+(a[j]-a[j-1])*(all-sum(i,j-1)),d[i][j-1][0]+(a[j]-a[i])*(all-sum(i,j-1)));
            }
        printf("%lld",mn(d[1][n][0],d[1][n][1]));
        return 0;
    }
  • 相关阅读:
    看清爱情的本质,学会受伤。
    美股课堂:美国银行开户亲历记
    京JS 2013
    果皮移动
    果皮移动 移动电商!
    http://www.cutt.com/
    简网APP工场-服务介绍
    Get started
    中科院青年公寓
    c++ replaceAll
  • 原文地址:https://www.cnblogs.com/Narh/p/8456995.html
Copyright © 2011-2022 走看看