結果

提出番号 947
提出者 kim
言語 C++
提出日時 2017-08-01 16:00:07
問題名 (28)いつだって一位の男、olphe君
結果 WA
点数 0%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 WA 0% 2ms 8000KB
2 WA 0% 1ms 7680KB
3 WA 0% 12ms 7424KB
4 WA 0% 1ms 8320KB
5 WA 0% 2ms 7808KB
6 WA 0% 2ms 8320KB
7 WA 0% 2ms 7984KB
8 WA 0% 1ms 7952KB
9 WA 0% 1ms 7664KB
10 AC 100% 2ms 7952KB
11 WA 0% 2ms 8320KB
12 AC 100% 2ms 8320KB
13 WA 0% 2ms 8320KB
14 WA 0% 1ms 7680KB
15 AC 100% 2ms 8320KB
16 AC 100% 1ms 7680KB
17 WA 0% 2ms 8320KB
18 WA 0% 1ms 7952KB
19 WA 0% 2ms 8000KB
20 AC 100% 3ms 8000KB

ソースコード

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

#define MAX(a,b) ((a)>(b)?(a):(b))

long long maxPack(vector<int>& Ps, int index, int target) {
    if (index==(int)Ps.size()-1) {
        return (Ps[index]<target)?Ps[index]:0;
    }
    if (target-Ps[index]<0) return maxPack(Ps,index+1,target);
    return MAX(Ps[index]+maxPack(Ps,index+1,target-Ps[index]),maxPack(Ps,index+1,target));
}

int main()
{
    int N;
    vector<int> Ps;
    long long P,S;
    long long target;
    long long total=0;

    cin >> N;
    for(int i=0; i<N; ++i){
        cin >> P;
        Ps.push_back(P);
        total+=P;
    }
    cin >> S;
    if(S==0) {
        sort(Ps.begin(),Ps.end());
        cout << Ps.front() << endl;
    } else {
        target = P-S;
        cout << total-maxPack(Ps,0,target) << endl;
    }
    return 0;
}