代码:
//
// 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;
}
京公网安备 11010502036488号