01背包补题(一)(下)

简介: 01背包补题(一)

P1926 小书童——刷题大军

本题链接P1926 小书童——刷题大军

本博客给出本题截图

62.png

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 160, M = 15;
int f[N];    // 在用时不超过 i 的情况下获得的最大得分
int v[M];
int vh[M], wh[M];
int main()
{
    int n, m, k, r;
    cin >> n >> m >> k >> r;
    for (int i = 1; i <= n; i ++ ) cin >> v[i];
    for (int i = 1; i <= m; i ++ ) cin >> vh[i];
    for (int i = 1; i <= n; i ++ ) cin >> wh[i];
    sort(v + 1, v + n + 1);    // 贪心,优先去做耗时较少的题目
    for (int i = 1; i <= n; i ++ )
        for (int j = r; j >= vh[i]; j -- )
            f[j] = max(f[j], f[j - vh[i]] + wh[i]);
    for (int i = 1; i <= r; i ++ )
        if (f[i] >= k)
        {
            r -= i;
            break;
        }
    int cnt = 0;
    for (int i = 1; i <= n; i ++ )
        if (r >= v[i])
        {
            r -= v[i];
            cnt ++;
        }
    cout << cnt << endl;
    return 0;
}

P1802 5 倍经验日

本题链接P1802 5 倍经验日

本博客给出本题截图

63.png

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 1010;
LL f[N];
int main()
{
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i ++ )
    {
        int l, w, v;
        cin >> l >> w >> v;
        for (int j = m; j >= 0; j--)
        {
            if (j >= v) f[j] = max(f[j] + l, f[j - v] + w);
            else f[j] = f[j] + l;
        }
    }
    cout << 5 * f[m] << endl;
    return 0;
}

P1734 最大约数和

本题链接P1734 最大约数和

本博客给出本题截图

64.png

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1010;
int w[N];
int f[N];
int main()
{
    int n;
    cin >> n;
    // 预处理w数组
    for (int i = 1; i <= n / 2; i ++ )
        for (int j = 2; i * j <= n; j ++ )
            w[i * j] += i;
    for (int i = 1; i <= n; i ++ )
        for (int j = n; j >= i; j -- )
            f[j] = max(f[j], f[j - i] + w[i]);
    cout << f[n] << endl;
    return 0;
}

P2392 kkksc03考前临时抱佛脚

本题链接P2392 kkksc03考前临时抱佛脚

本博客给出本题截图

65.png

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 610, M = 20;
int s[5];
int w[M];
int f[N];
int main()
{
    for (int i = 1; i <= 4; i ++ ) cin >> s[i];
    int res = 0;
    for (int i = 1; i <= 4; i ++ )
    {
        int sum = 0;
        memset(f, 0, sizeof f);
        for (int j = 1; j <= s[i]; j ++ ) cin >> w[j], sum += w[j];
        int m = sum / 2;
        for (int j = 1; j <= s[i]; j ++ )
            for (int k = m; k >= w[j]; k -- )
                f[k] = max(f[k], f[k - w[j]] + w[j]);
        res += max(f[m], sum - f[m]);
    }
    cout << res << endl;
    return 0;
}

总结

题目比较灵活,有时需要进行预处理,有时需要加上贪心的策略。

目录
相关文章
基于宜搭的“设备报修”实践案例
设备报修是各企业、学校、医院等单位必不可少的应用场景,包括设备管理、用户报修、报修单管理、派单管理、维修管理等。那么,如何利用宜搭+钉钉实现高效的设备报修管理呢?
基于宜搭的“设备报修”实践案例
|
机器学习/深度学习 人工智能 算法
利用机器学习预测股市趋势:一个实战案例
【9月更文挑战第5天】在这篇文章中,我们将探索如何使用机器学习技术来预测股市趋势。我们将通过一个简单的Python代码示例来演示如何实现这一目标。请注意,这只是一个入门级的示例,实际应用中可能需要更复杂的模型和更多的数据。
|
JSON NoSQL Java
快速搭建一个网关服务
快速搭建一个网关服务,动态路由、鉴权看完就会!
403 0
|
JavaScript Dubbo 小程序
IDEA 插件版的 Postman,接口调试太方便了!
IDEA 插件版的 Postman,接口调试太方便了!
IDEA 插件版的 Postman,接口调试太方便了!
|
存储 弹性计算 分布式计算
如何将操作日志持续投递到 SLS/OSS
操作审计(ActionTrail)帮助您监控并记录阿里云账号的活动,包括通过阿里云控制台、OpenAPI、开发者工具对云上产品和服务的访问和使用行为,记录为操作日志。
如何将操作日志持续投递到 SLS/OSS
STP生成树协议的介绍
STP是一种网络上使用非常广泛的技术。现在已经衍生了STP,RSTP,MSTP。
920 0
STP生成树协议的介绍
|
弹性计算 应用服务中间件 程序员
用阿里云产品搭建个人网站全教程
申明:这是整体流程,看完这个你至少知道搭建网站怎么个流程了,相当于一个说明书,具体操作时,阿里会给你提示的,很人性化.建站的三个核心关键步骤1注册域名建议直接在阿里云注册,方便快捷,管理也方便,还有优惠呦,附阿里云域名优惠口令【优惠口令】com英文域名续费:珠光宝气cn英文域名续费:诸事顺利令不定期更新,仅PC端适用,仅普通词适用,限时限量,最新的优惠口令可以扫描下图中二维码关注阿里云域名公众号,然后直接在公众号中回复“优惠口令”即可获取 2买阿里云服务器主要分两种,一是轻量应用型的轻量应用服务器,二是ECS云服务器,分为国内、香港以及海外的。
7779 0
|
编解码 分布式计算 Hadoop
Spark HadoopRDD读取HDFS文件
- 源码分析Spark HadoopRDD是如何读取HDFS上的文件 - 分析HadoopRDD预分区的计算方式,非首个分区的开始位置计算 - 来三种情况分析,不同情部下HadoopRDD的分区计算方式
4750 0
|
存储 NoSQL 大数据
MongoDB数据库发展历程及商业模式
MongoDB数据库发展历程及商业模式2007年,Dwight Merriman, Eliot Horowitz和Kevin Ryan成立10gen软件公司,在成立之初,这家的公司目标进军云计算行业,为企业提供云计算服务。
2120 1