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;
}

总结

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

目录
相关文章
|
搜索推荐 云计算
在线教育平台
在线教育平台
1283 3
|
新零售 人工智能 安全
云上未来,数智导航:阿里云研究院报告合集
阿里云研究院,甄选了2021-2022年度的10份重磅报告,分别从数字经济、行业转型、数字县域等领域,尝试解读、并推动各行各业的转型升级,展望中国数字经济的未来,迎接数字经济发展的春天。
云上未来,数智导航:阿里云研究院报告合集
|
存储 消息中间件 NoSQL
聊一聊数据库的行存与列存
好多人最开始学习数据库的时候,是关系数据库,数据以表格形式存储,一行表示一条记录。其实这种就是典型的行存储(Row-based store),将表按行存储到磁盘分区上。 而一些数据库还支持列存储(Column-based store),它将表按列存储到磁盘分区上。
聊一聊数据库的行存与列存
|
JSON 数据挖掘 API
电商信息指南:API接口淘宝关键词、店铺所有商品获取
要获取淘宝关键词商品数据和店铺所有商品的API接口,需先注册淘宝开放平台账号并创建应用,获取API密钥。接着,使用密钥获取访问令牌,详细阅读API文档,构造并发送API请求,解析响应数据。特别地,使用`item_search_shop`接口可获取店铺内所有商品信息。
|
人工智能 算法 数据挖掘
什么是程序设计
一、什么是程序设计 程序设计是指通过编写、测试和维护计算机程序来解决问题或实现特定功能的过程。它涉及到确定问题的需求、设计算法、选择合适的编程语言、编写代码、调试和测试程序等步骤。程序设计的目标是创建高效、可靠、易于理解和维护的软件。 二、程序设计具有以下特点 1. 抽象性:程序设计是一种高度抽象的活动,它涉及到将实际问题转化为计算机可以理解和执行的指令。 2. 逻辑性:程序设计需要遵循严格的逻辑结构和规则,以确保程序的正确性和可靠性。逻辑思维和分析能力是程序设计的重要组成部分。 3. 创造性:程序设计是一种创造性的活动,程序员需要在解决问题的过程中提出新的思路和方法,以实现更好的效果。
1165 0
|
架构师 Java 程序员
3分钟通晓,互联网架构20年以来的演进
作为一个Java程序员,你可能也思考过,为什么我还是普通开发,为什么我还是高级开发,普通开发和高级开发有什么区别?你是不是也想过要成为架构师?想要成为合格的架构师,就必须要了解架构的演进,今天,我们就来聊一聊,Java架构的演变历史。
397 0
|
算法 安全 Unix
翁恺C语言程序设计网课笔记合集
学习自翁恺C语言程序设计网课。
1981 1
翁恺C语言程序设计网课笔记合集
|
存储 供应链 Python
用Python代码打造超市收银系统
用Python代码打造超市收银系统
997 1
|
人工智能 前端开发 算法
未来人工智能技术在前端开发中的应用与挑战
随着人工智能技术的迅猛发展,前端开发领域也开始探索其在用户体验、性能优化等方面的应用。本文将探讨未来人工智能技术在前端开发中的潜在应用和可能面临的挑战。
|
项目管理 C# 开发者
介绍瀑布模式:经典的软件开发项目管理方法
致谢:感谢阅读本文,如有任何问题或疑问,请随时与我们联系。 推荐一个零声学院免费教程,个人觉得老师讲得不错, 学习链接:https://xxetb.xet.tech/s/HY8za
499 0