#include #pragma warning(disable:4996) using namespace std; using ll = long long; static const int INF = 10000000; int main() { int N; scanf("%d", &N); vectorv(N); for (int i = 0; i < N; i++) { scanf("%d", &v[i]); } vectordp(1 << N,INF); dp[0] = 0; for (int bit = 0; bit < (1 << N); bit++) { for (int i = 0; i < N; i++) {//次に買う商品 if (bit&(1 << i))continue;//使用済みなら選び直し //int add = -(dp[bit] % 1000) + v[i]; int teika = 0;//これまで購入した商品の定価 for (int j = 0; j < N; j++) { if (bit & 1 << j)teika += v[j]; } int add = -(teika % 1000) + v[i]; if (add < 0)add = 0; dp[bit | (1 << i)] = min(dp[bit | (1 << i)],dp[bit]+add); } } printf("%d\n", dp[(1 << N) - 1]); }