Luogu 1833 樱花

本文探讨了一位生物学霸在有限时间内,通过合理选择观赏樱花树以最大化美学体验的问题。采用混合背包算法解决,考虑了每棵树的美学值、观赏时间和次数限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:传送门

题目背景

《爱与愁的故事第四弹·plant》第一章。

题目描述

爱与愁大神后院里种了n棵樱花树,每棵都有美学值Ci。爱与愁大神在每天上学前都会来赏花。爱与愁大神可是生物学霸,他懂得如何欣赏樱花:一种樱花树看一遍过,一种樱花树最多看Ai遍,一种樱花树可以看无数遍。但是看每棵樱花树都有一定的时间Ti。爱与愁大神离去上学的时间只剩下一小会儿了。求解看哪几棵樱花树能使美学值最高且爱与愁大神能准时(或提早)去上学。

输入格式:

共n+1行:
第1行:三个数:现在时间Ts(几点:几分),去上学的时间Te(几点:几分),爱与愁大神院子里有几棵樱花树n。
第2行~第n+1行:每行三个数:看完第i棵树的耗费时间Ti,第i棵树的美学值Ci,看第i棵树的次数Pi(Pi=0表示无数次,Pi是其他数字表示最多可看的次数Pi)。

输出格式:

只有一个整数,表示最大美学值。

输入样例

6:50 7:00 3
2 1 0
3 3 1
4 5 4

输出样例

11

每种樱花能被看的次数不同,混合背包的板子

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <complex>
#include <algorithm>
#include <climits>
#include <queue>
#include <map>
#include <vector>
#include <iomanip>
#define A 10010
#define B 2010
#define ll long long

using namespace std;
int t1, t2, t3, t4, V, n, T[A], C[A], P[A], f[A];

int main() {
    scanf("%d:%d", &t1, &t2);
    scanf("%d:%d", &t3, &t4);
    cin >> n;
    V = (t3 - t1) * 60 - t2 + t4;
    for (int i = 1; i <= n; i++) cin >> T[i] >> C[i] >> P[i];
    for (int i = 1; i <= n; i++)
      if (P[i] == 0) {
      	for (int j = T[i]; j <= V; j++)
      	  f[j] = max(f[j], f[j - T[i]] + C[i]);
        }
        else {
            for (int k = 1; k <= P[i]; k++)
                for (int j = V; j >= T[i]; j--)
              	f[j] = max(f[j], f[j - T[i]] + C[i]);
        }
        cout << f[V];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

良月澪二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值