ソースコード
#include <bits/stdc++.h>
using namespace std;
using int64 = long long;
const int INF = 1 << 29;
int dp[1 << 16][16];
int ok[1 << 16];
int rec(int bit, int beet) {
if(beet == 0) return INF;
if(~dp[bit][beet]) return dp[bit][beet];
int ret = ok[bit];
for(int i = bit & (bit - 1); i > 0; i = (i - 1) & bit) {
for(int j = 0; j <= beet; j++) {
ret = min(ret, rec(i, beet - j) + rec(bit ^ i, j));
}
}
return ret;
}
int main() {
int N, K, B, A[16];
cin >> N >> K >> B;
for(int i = 0; i < N; i++) cin >> A[i];
for(int i = 0; i < 1 << N; i++) {
ok[i] = __builtin_popcount(i);
int sum = 0;
for(int j = 0; j < N; j++) {
if((i >> j) & 1) sum += A[j];
}
if(sum <= B) --ok[i];
}
memset(dp, -1, sizeof(dp));
cout << rec((1 << N) - 1, K) << endl;
}