#define _CRT_SECURE_NO_WARNINGS #define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #define REP(i,a,b) for(i=a;i 0) { if(n&1) res = res * x; x = x * x; n >>= 1; } return res; } template T combi(T n,T r) { T i,j; T rep = 1; if(r > n/2) r = n-r; rep(i,r) rep *= n-i; rep(i,r) rep /= r-i; return rep; } // 解説見てから書いたコード int main(void) { int i,j,k,l; int N; int M[20]; static int table[100000]; int a,b; cin >> N; rep(i,N) cin >> M[i]; int n = pow((ull)2,(ull)N); for(i=0;i money[g] + max(0,M[f]-table[g])){ min = money[g] + max(0,M[f]-table[g]); } } money[d] = min; }while(next_permutation(c,c+N)); } cout << money[n-1] << endl; return 0; }