代码:
// // Created by 徐志远 on 2019-09-26. // #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 210 int f[N]; //f[N] 表示 当底部为消耗了厚度为N时上方得到的最小的长度 int n; int v[N],w[N]; int main(){ cin>>n; int all = 0; for(int i = 1;i <= n;i++){ cin>>v[i]>>w[i]; all += v[i]; } f[0] =0; for(int i =1;i<=all;i++) f[i] = 500; for(int i =1;i<=n;i++){ for(int j = all;j>=v[i];j--){ f[j] = min(f[j],f[j-v[i]]+w[i]); } } int ans = 0; for(int i = all;i>=0;i--){ if(all-i>=f[i]){ ans = all-i; break; } } cout<<ans<<endl; return 0; }