#include <bits/stdc++.h>
using namespace std;
const int N = 110, M = 2 * N;
int n;
int dp[M];
int sum1;
int v[N], w[N];
int main()
{
cin >> n;
memset(dp, 0x3f, sizeof dp);
dp[0] = 0;
for (int i = 1; i<= n; i ++ )
{
cin >> v[i] >> w[i];
sum1 += v[i];
}
for (int i = 1; i <= n; i ++ )
for (int j = sum1; j >= v[i]; j -- )
dp[j] = min(dp[j], dp[j - v[i]] + w[i]);
for (int i = sum1; i >= 0; i -- )
if (sum1 - i >= dp[i])
{
cout << sum1 - i << endl;
break;
}
return 0;
}
最后的 i 不应该是下层书的厚度吗?为什么sum1 - i是下层书的厚度?