首页 > 其他分享 >2.11 背包学习

2.11 背包学习

时间:2023-02-11 21:58:24浏览次数:44  
标签:背包 const int cin 学习 -- include 2.11

1020. 潜水员

#include <iostream>
#include <cstring>
using namespace std;

const int N = 22, M = 80;

int f[N][M];
int n, m, k;

int main() {
    cin >> n >> m >> k;
    memset(f, 0x3f, sizeof f);
    f[0][0] = 0;
    while (k --) {
        int a, b, c;
        cin >> a >> b >> c;
        for (int i = n; i >= 0; i --)
            for (int j = m; j >= 0; j --)
                f[i][j] = min(f[i][j], f[max(0, i - a)][max(0,j - b)] + c);
    }

    cout << f[n][m] << endl;
    return 0;
}

\[\]

278. 数字组合

思路

就是01背包求方案数问题。
集合f[i,j]表示的是在前i个物品中,选择总体积恰好等于j的集合
集合划分为包括第i个物品和不包括第个物品
方案数就为这两种集合价值之和:
f[i, j] = f[i - 1, j] + f[i - 1, j - vi];

#include <iostream>
using namespace std;

const int N = 10010;
int f[N];
int n, m;

int main() {
    cin >> n >> m;
    f[0] = 1;
    for (int i = 1; i <= n; i ++) {
        int v;
        cin >> v;
        for (int j = m; j >= v; j --) {
            f[j] += f[j - v];
        }
    }
    
    cout << f[m] << endl;
}

\[\]

1019. 庆功会

思路

本题数据范围较小,直接用\(n^3\)的暴力写法即可,板子题

#include <iostream>

using namespace std;

const int N = 6010;
int n, m;
int f[N];

int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i ++) {
        int v, w, s;
        cin >> v >> w >> s;
        for (int j = m; j >= v; j --) {
            for (int k = 0; k <= s && k * v <= j; k ++) {
                f[j] = max(f[j], f[j - k * v] + k * w);
            }
        }
    }
    
    cout << f[m] << endl;
}

\[\]

1023. 买书

思路

完全背包求方案数问题,和01背包求方案数问题类似
思路也差不多,套个完全背包的板子就行

#include <iostream>

using namespace std;

const int N = 1010;
int f[N];
int a[5] = {0, 10, 20, 50, 100};
int n;

int main() {
    cin >> n;
    f[0] = 1;
    for (int i = 1; i <= 4; i ++) {
        for (int j = a[i]; j <= n; j ++) {
            f[j] += f[j - a[i]];
        }
    }
    
    cout << f[n] << endl;
    
    return 0;
}

标签:背包,const,int,cin,学习,--,include,2.11
From: https://www.cnblogs.com/lbzbk/p/17112557.html

相关文章

  • C语言学习:字符串的长度与比较
     1#include<io_utils.h>2#include<stdlib.h>3#include<errno.h>4#include<time.h>5#include<string.h>67voidSwapString(char**first,ch......
  • PHP学习笔记——【一往无前】
    前言欢迎来到PHP学习的第一篇文章(一往无前):一直往前,无所阻挡。勇猛无畏地前进,接下来的PHP文章会不断更新相关学习笔记,期待和各位共同学习、交流!简单了解PHP(PHP:HypertextPr......
  • 「AcWing学习记录」并查集
    并查集1.将两个集合合并2.询问两个元素是否在一个集合当中时间复杂度近乎O(1)基本原理每个集合用一棵树来表示。树根的编号就是整个集合的编号,每个节点存储它的父节点......
  • C语言学习:字符串与其他数值类型的转换
     1#include<io_utils.h>2#include<stdlib.h>3#include<errno.h>45intmain(){6//PRINT_INT(atoi("1234"));//12347//PRINT_INT(atoi("-......
  • vue学习
    推荐大家安装的VScode中的Vue插件Vue3Snippetshttps://marketplace.visualstudio.com/items?itemName=hollowtree.vue-snippetsVeturht......
  • 学习打卡03-流程控制
    前言:程序中最经典的三种执行顺序顺序结构:自上而下的执行代码分支结构:根据条件,选择对应的代码执行ifswitch循环结构:控制某段代码重复执行......
  • C语言学习:案例:单链表的基本实现
     1#include<io_utils.h>2#include<stdlib.h>34typedefstructListNode{5intvalue;6structListNode*next;7}ListNode;89......
  • jenkins学习笔记之四:jenkins常用pipline DSL方法
    一、Json数据格式化(readJSON)#建议使用defresponse=readJSONtext:"${scanResult}"println(scanResult)//以下为原生方法。不建议使用importgroovy.json.*......
  • 闲话 23.2.11
    闲话huge:不要觉得自己nb就瞎写啥无关奥赛的玩意我背后一凉说实在的但是今天的闲话不能少(今天在拜读这篇题解时发现一只miku挺好看的就保存下来了miku!今日推......
  • Python基础学习总结
    python基础内容解释器编译器:将其他语言翻译成机器语言。分类编译器有两种类型,编译和解释(翻译时间点的不同)。编译型语言:源程序交给编译器,统一编译,一次性执行解释型......