首页 > 其他分享 >背包问题的一道经典问题

背包问题的一道经典问题

时间:2024-07-21 23:39:49浏览次数:13  
标签:星星 10 背包 int 问题 leq vector 经典 代价

Problem Description

小 A 有 \(n\) 次获得星星的机会。

在第 \(i\) 次机会里他有如下的 \(5\) 种选择(他必须做出恰好一种选择):

  • 跳过这一轮。

  • \(a_i\) 的代价获得 \(1\) 颗星星。

  • \(b_i\) 的代价获得 \(2\) 颗星星。

  • \(c_i\) 的代价获得 \(3\) 颗星星。

  • \(d_i\) 的代价获得 \(4\) 颗星星。

保证 \(0 < a_i \leq b_i \leq c_i \leq d_i \leq 10^9\)。

他想要获得恰好 \(k\) 颗星星,但是并不知道最小代价是多少,请你帮他计算这个最小值。

Input

本题有多组数据

第一行输入数据组数 \(T\)。

对于每组数据的第一行,有两个正整数表示 \(n,k\)。

接下来 \(n\) 行,输入四个数字 \(a_i,b_i,c_i,d_i\)。

\(1 \leq n \leq 1000, 0 \leq k \leq n \times 4.\)

满足 \(\sum n \leq 100000\)

Output

对于每组数据,输出一个数字表示这组数据的答案。

Sample Input

1 5 10 8 9 10 15 4 6 7 15 4 7 12 15 6 8 10 14 1 8 10 13

Sample Output

28

Hint

依次选择 3,3,0,3,1,代价是 10,7,0,10,1

AC code:

#include <bits/stdc++.h>
using namespace std;
#define  int  long long
int n, k;
void solve()
{
    cin >> n >> k;
    vector<vector<int>> a(n + 1, vector<int>(5, 0));
    vector<int> dp(k + 10, -1), cost(k + 1, 0);
    dp[0] = 0;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i][1] >> a[i][2] >> a[i][3] >> a[i][4];
    }

    for (int i = 1; i <= n; i++)
    {
        for (int j = k; j>=0; j--)
        {
            if (dp[j] != -1)
            {
                for (int _ = 1; _ <= 4; _++)
                {
                    if(dp[j+_]==-1)
                    {
                        dp[j+_]=dp[j]+a[i][_];
                    }
                    else
                    {
                        dp[j+_]=min(dp[j+_],dp[j]+a[i][_]);
                    }
                }
            }
        }
    }

    cout << dp[k] << endl;
}
signed main()
{
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

标签:星星,10,背包,int,问题,leq,vector,经典,代价
From: https://www.cnblogs.com/cxjy0322/p/18315158

相关文章

  • 【普及组】广度优先搜索BFS——到达型搜索问题_C++算法竞赛
    文章目录1.走迷宫例1.洛谷B3625迷宫寻路例2.洛谷P1825[USACO11OPEN]CornMazeS例3.[ABC348D]MedicinesonGrid(AtCoder)2.生活背景下的常见问题例.P3958[NOIP2017提高组]奶酪3.输出路径例.洛谷P6207[USACO06OCT]CowsonSkatesGEnd提示:本文建议有一定......
  • 解决spring后端传前端数值为空的问题
    问题:在开发当中,由于我的数据传输从DTO在某些场景下,其中的部分字段并不需求进行值的传递,但在其他功能当中需要;(比如开发题目模块时,查询题目采用同一接口,根据题目id不同,后台判断其为多选还是单选进行回传给dto给前端)。导致出现了如下情况的诸多null值,而这些是没有作用但又不可删除的......
  • 有限背包计数问题
    https://class.51nod.com/Html/Textbook/ChapterIndex.html#chapterId=335&textbookId=126https://class.51nod.com/Html/Challenge/Problem.Html#problemId=1597如有限背包计数问题发现对于物品\(i\)最多填充\(i*i\),而对于\(i>\sqrtn\)可以视为完全背包,所以我们分为两类......
  • 区块链面试问题
    1、区块链是什么?区块链是一个不断增长的分类账(文件),它以安全、按时间顺序和不可变的方式永久记录已发生的所有交易。它可用于资金、财产、合同等的安全转移,而无需银行或政府等第三方中介。区块链是最著名的加密货币比特币的支柱。它是一个点对点的电子现金系统和一个去中心......
  • 解决Element UI 表格组件懒加载数据刷新问题
    一、问题描述elementui的table组件设置成懒加载时,遇到数据表格需要更新、删除等操作,子节点不会自动更新。二、解决思路刷新数据,就是重新调用load(),通过map记录已展开的节点,需要刷新数据时,取出对应treeNode,调用load()进行数据刷新。三、代码实现(VUE)exportdefault{data(......
  • Keil遇到的两个问题
    1:学习记录-“unknowntypename‘DMA_HandleTypeDef‘”报错首先最新版的KEIL不知道是我下载问题还是怎么的,没有gotodefine 然后我这个是跳不到他定义的地方,通过比较文件找到定义的结构体的位置的其次至于这个原因不清楚具体原因,解决方法也不清楚为什么会成功解决方法在......
  • 核电站问题
    题目描述核电站问题一个核电站有N个放核物质的坑,坑排列在一条直线上。如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质。任务:对于给定的N和M,求不发生爆炸的放置核物质的方案总数。输入输出格式输入格式:输入文件只一行,两个正整数N,M(1......
  • 每日一题之快乐数问题
    题目:题目链接:快乐数题解:方法一:哈希表首先就是何种情况下不是快乐数,那就是处理过的结果多次重复出现的情况,那这里就可以通过哈希表在每次循环中存储处理后的结果,如果处理后的结果在哈希表中查找的到说明结果重复说明该数不是快乐数,退出循环即可,否则一直循环到处理结果为1......
  • CentOS安装显卡驱动、修改分辨率和解决黑屏问题
    【系列】真机安装CentOSStream8问题第一步解决安装过程报错第二步分区第三步配置软件源第四步安装显卡驱动(❗︎本节内容❗︎)第五步挂载U盘第六步解决没有1920x1080分辨率的问题文章目录【系列】真机安装CentOSStream8问题一、下载显卡驱动二、安装驱动步骤......
  • python 中两体问题的集成
    我正在尝试使用python和pygame创建一个二体Sim作为更大项目目标的第一阶段,以在屏幕上显示对象。我目前的主要问题是,轨道卫星在目标行星周围倾斜时它应该处于稳定的320公里圆形轨道上。我为四种不同的集成制作了四种不同的功能。Euler、Leapfrog、Verlet和RK4。......