第三题裸的背包问题。。。
#include <bits/stdc++.h>
using namespace std;
const int N = 55;
const long long INF = 1e18;
long long dp[2*N],v[N];
int w[N];
int main(){
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)scanf("%lld",&v[i]);
    for(int i=0;i<n;i++)scanf("%d",&w[i]);
    dp[0] = 0;
    for(int i=1;i<=100;i++)dp[i] = -INF;
    for(int i=0;i<n;i++){
        for(int j=100;j>=w[i];j--){
            dp[j] = max(dp[j],dp[j-w[i]]+v[i]);
        }
        for(int j=0;j<=100;j++)if(dp[j]<v[i])dp[j] = -INF;
    }
    for(int i=1;i<=100;i++){
        if(dp[i]>0){
            printf("%d\n",i);
            break;
        }
    }
    return 0;
}