题意:
题意看图就懂,求书能摆放的最小长度,上面书的长度不能超过下面的。
思路:
每本书有两种可能的摆放,由这两种转移即可。
代码:
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 105;
const int INF = 0x3f3f3f3f;
int t[MAXN], w[MAXN], dp[MAXN][2 * MAXN];
int main() {
int n, sum = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d%d", &t[i], &w[i]);
memset(dp, INF, sizeof(dp));
dp[0][0] = 0;
for (int i = 1; i <= n; i++) {
sum += t[i];
for (int j = 0; j <= sum; j++) {
if (j - t[i] >= 0)
dp[i][j] = min(dp[i][j], dp[i - 1][j - t[i]]);
dp[i][j] = min(dp[i][j], dp[i - 1][j] + w[i]);
}
}
for (int j = 0; j <= sum; j++) {
if (dp[n][j] <= j) {
printf("%d\n", j);
return 0;
}
}
return 0;
}