結果

問題 No.286 Modulo Discount Store
ユーザー koyopro
提出日時 2015-10-09 23:34:05
言語 C++11
(gcc 4.8.5)
結果
AC  
実行時間 19 ms
コード長 708 Byte
コンパイル時間 1,089 ms
使用メモリ 8,916 KB
最終ジャッジ日時 2019-07-02 11:55:07

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
case1.txt AC 2 ms
6,868 KB
case2.txt AC 3 ms
6,872 KB
case3.txt AC 6 ms
6,872 KB
case4.txt AC 3 ms
6,872 KB
case5.txt AC 3 ms
6,868 KB
case6.txt AC 2 ms
6,872 KB
case7.txt AC 11 ms
6,868 KB
case8.txt AC 3 ms
8,912 KB
case9.txt AC 3 ms
6,872 KB
case10.txt AC 2 ms
6,868 KB
case11.txt AC 5 ms
6,872 KB
case12.txt AC 2 ms
6,868 KB
case13.txt AC 3 ms
6,868 KB
case14.txt AC 7 ms
6,868 KB
case15.txt AC 2 ms
6,872 KB
case16.txt AC 3 ms
6,868 KB
case17.txt AC 2 ms
6,868 KB
case18.txt AC 19 ms
6,872 KB
case19.txt AC 5 ms
6,872 KB
case20.txt AC 2 ms
6,872 KB
case21.txt AC 3 ms
6,872 KB
case22.txt AC 3 ms
6,868 KB
case23.txt AC 2 ms
8,916 KB
case24.txt AC 7 ms
6,868 KB
case25.txt AC 3 ms
6,868 KB
case26.txt AC 3 ms
6,872 KB
case27.txt AC 2 ms
6,872 KB
case28.txt AC 3 ms
6,872 KB
case29.txt AC 11 ms
6,872 KB
case30.txt AC 3 ms
6,868 KB
case31.txt AC 2 ms
6,868 KB
case32.txt AC 3 ms
6,868 KB
case33.txt AC 2 ms
6,868 KB
case34.txt AC 3 ms
6,868 KB
case35.txt AC 2 ms
6,872 KB
case36.txt AC 3 ms
6,872 KB
case37.txt AC 2 ms
6,868 KB
case38.txt AC 3 ms
6,868 KB
case39.txt AC 2 ms
6,872 KB
case40.txt AC 11 ms
6,872 KB
sample1.txt AC 3 ms
6,872 KB
sample2.txt AC 2 ms
8,916 KB
sample3.txt AC 3 ms
6,868 KB
テストケース一括ダウンロード

ソースコード

diff #
#include "bits/stdc++.h"
using namespace std;

#define REP(i, n) for(int i=0; i<(n); i++)

int N,T;
vector<int> M;
int sum(int n) {
    int cnt = 0;
    REP(i,N) {
        if (n & 1<<i) cnt += M[i];
    }
    return cnt;
}

signed main()
{
    cin >> N;
    M.resize(N);
    REP(i,N) cin>>M[i];
    // bitDP
    int dp[(1<<15)+10];
    REP(i,1<<N) dp[i] = 1e8;
    dp[0] = 0;
    REP(i,1<<N) {
        int minp = dp[i];
        REP(j,N) {
            if ((i & 1<<j) == false) continue;
            int prei = i - (1<<j);
            int s = sum(prei);
            minp = min(minp, dp[prei] + max(0, M[j] - s % 1000));
        }
        dp[i] = minp;
    }
    cout << dp[(1<<N) - 1] << endl;
    return 0;
}
0