#include <iostream> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; int n; LL w[105], g[105]; LL dp[105], st[105]; int main() {     // freopen("in.txt", "r", stdin);     memset(dp, 0, sizeof(dp));     memset(st, 0, sizeof(st));     cin >> n;     for (int i = 1; i <= n; i++) cin >> w[i];     for (int i = 1; i <= n; i++) cin >> g[i];     int mx = 0;     for (int i = 1; i <= n; i++) mx += g[i];     LL mmx = 0;     for (int k = 1; k <= n; k++) mmx = max(mmx, w[k]);     for (int i = 1; i <= n; i++) {         int p = g[i];         for (int j = mx; j >= p; j--) {             LL sum = w[i];             for (int k = 0; k < n; k++)                 if ((1 << k) & st[j - p]) sum += w[k + 1];             if (sum >= dp[j]) {                 st[j] = (st[j - p] | (1 << (i - 1)));                 dp[j] = sum;             }         }     }     for (int i = 1; i <= mx; i++)         if (dp[i] >= mmx) {             cout << i << endl;             break;         }     return 0; }
点赞 评论

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务