P1833 樱花
思路
混合背包模板+二进制优化。
代码
#include<iostream>
#define MAXN 10007
using namespace std;
int v[MAXN], w[MAXN], num[MAXN], n, T, cnt, dp[MAXN];
int main(void)
{
int h1 = 0, h2 = 0, m1 = 0, m2 = 0;
char ch;
cin >> h1 >> ch >> m1;
cin >> h2 >> ch >> m2;
cin >> n;
T = h2 * 60 + m2 - h1 * 60 - m1;
for (int i = 1; i <= n; i++)
cin >> w[i] >> v[i] >> num[i];
for (int i = 1; i <= n; i++)
{
if (num[i] == 0) {
for (int j = w[i]; j <= T; j++)
dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
}
else {
int count = 1;
while (num[i] > count) {
for (int j = T; j >= count * w[i]; j--)
dp[j] = max(dp[j], dp[j - count * w[i]] + v[i] * count);
num[i] -= count;
count = 2;
}
for (int j = T; j >= num[i] * w[i]; j--)
dp[j] = max(dp[j], dp[j - num[i] * w[i]] + v[i] * num[i]);
}
}
cout << dp[T];
return 0;
}

浙公网安备 33010602011771号