第三题裸的背包问题。。。
#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;
}