背包问题,水得我无话可说。
#include <bits/stdc++.h>
#define N 11000
using namespace std;
int t, n, w[N], v[N], s[N];
int dp[N];
int main() {
int h1, h2, min1, min2;
scanf("%d:%d %d:%d %d", &h1, &min1, &h2, &min2, &n);
t = (h2 - h1) * 60 + min2 - min1;
// cout << t << endl;
for(int i = 1; i <= n; i ++) {
cin >> w[i] >> v[i] >> s[i];
if(!s[i]) s[i] = INT_MAX;
}
for(int i = 1; i <= n; i ++)
for(int j = t; j > 0; j --)
for(int k = 1; k <= j / w[i]; k ++)
if(k <= s[i])
dp[j] = max(dp[j], dp[j - w[i] * k] + v[i] * k);
cout << dp[t];
return 0;
}