제출 #1370348

#제출 시각아이디문제언어결과실행 시간메모리
1370348solution6312Lawn Mower (CEOI25_lawnmower)C++17
25 / 100
161 ms117588 KiB
#include "lawn.h"
#include <iostream>
using namespace std;
using ll=long long;

namespace
{
    const int MN=5013;
    const ll inf64=1e18;
    int N; ll C, B;
    ll A[MN], V[MN];
    ll f[MN][MN], dp[MN];
    void init(int L)
    {
        ll ans=0;
        int cur=0;
        for (int i=L; i<=N; i++)
        {
            if (cur+V[i]>C)
            {
                ans+=A[i]+B;
                ll cnt=(V[i]-C+cur)/C;
                if ((V[i]-C+cur)%C)
                {
                    ans+=(cnt+1)*A[i]+cnt*B;
                    cur=(V[i]-C+cur)%C;
                }
                else
                {
                    ans+=cnt*A[i]+cnt*B;
                    cur=0;
                }
            }
            else
            {
                ans+=A[i];
                cur+=V[i];
            }
            f[L][i]=ans;
            if (cur) f[L][i]+=B;
        }
    }
}

ll mow(int n, int c, int b, vector<int> &a, vector<int> &v)
{
    N=n; C=c; B=b;
    for (int i=1; i<=N; i++) A[i]=a[i-1];
    for (int i=1; i<=N; i++) V[i]=v[i-1];
    for (int i=1; i<=N; i++) init(i);
    dp[0]=0;
    for (int i=1; i<=N; i++)
    {
        dp[i]=inf64;
        for (int j=0; j<i; j++)
        {
            dp[i]=min(dp[i], dp[j]+f[j+1][i]);
        }
        //cerr<<i<<": "<<dp[i]<<endl;
    }
    return dp[N];
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…