제출 #1370481

#제출 시각아이디문제언어결과실행 시간메모리
1370481solution6312Lawn Mower (CEOI25_lawnmower)C++17
25 / 100
143 ms1348 KiB
#include "lawn.h"
#include <iostream>
#include <cassert>
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], pre[MN];
    ll dp[MN];
}

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];
        pre[i]=pre[i-1]+V[i];
    }
    for (int j=0; j<C; j++) dp[j]=inf64;
    dp[0]=0;
    for (int i=1; i<=N; i++)
    {
        ll cnt=V[i]/C;
        for (ll j=0; j<C; j++)
        {
            ll cnt2=((j+pre[i-1])%C+V[i])/C;
            if ((j+pre[i-1])%C>=C-V[i]%C) assert(cnt2==cnt+1);
            else assert(cnt2==cnt);
            dp[j]+=B*cnt2+A[i]*(cnt2+1);
        }
        dp[((-pre[i])%C+C)%C]-=A[i];
        for (int j=0; j<C; j++) dp[((-pre[i])%C+C)%C]=min(dp[((-pre[i])%C+C)%C], dp[j]+B);
    }
    return dp[((-pre[N])%C+C)%C];
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…