結果

提出番号 1060
提出者 Pro_ktmr
言語 C++
提出日時 2017-11-07 21:59:54
問題名 (3)足すだけ(Easy)
結果 WA
点数 0%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 WA 0% 2ms 7248KB
2 WA 0% 1ms 8448KB
3 WA 0% 293ms 0KB
4 WA 0% 10ms 7808KB
5 WA 0% 312ms 0KB
6 WA 0% 10ms 8400KB
7 WA 0% 470ms 0KB
8 WA 0% 9ms 8608KB
9 WA 0% 9ms 8704KB
10 WA 0% 9ms 8688KB

ソースコード

//オレンジの出荷

#include<iostream>
#include<stdio.h>
#include<string>
#include<vector>
#include<map>
using namespace std;

int N,M;
long long K;

long long orange[20000] = {};
long long cost[20000][1000] = {};
long long cost_min[20000] = {};

long long c_cost(int A,int B){//AからB個
    if(cost[A][B] != 0){
        return cost[A][B];
    }
    else if(A+B > N){
        cost[A][B] = -1;
        return -1;
    }
    else{
        long long min = 9223372036854775807;
        long long max = -1;
        for(int i=0; i<B; i++){
            if(min>orange[A+i]) min=orange[A+i];
            if(max<orange[A+i]) max=orange[A+i];
        }
        cost[A][B] = B*(max-min)+K;
        return cost[A][B];
    }
    
    
}

long long c_min(int A){//Aより大きいときの最小値
    if(cost_min[A] != 0){
        return cost_min[A];
    }
    else{
        long long min = 9223372036854775807;
        for (int i=1; i+A<=N && i<=M; i++){
            long long tmp;
            if(A+i==N){
                tmp = c_cost(A,i);
            }
            else{
                tmp = c_cost(A,i)+c_min(A+i);
            }
            if(min>tmp) min=tmp;
        }
        cost_min[A] = min;

        return min;
    }
}

int main(){
    cin >> N >> M >> K;

    for(int i=0; i<N; i++){
        cin >> orange[i];
    }

    cout << c_min(0) << endl;

    return 0;
}