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