首页 > 其他分享 >Acwing 12. 背包问题求具体方案

Acwing 12. 背包问题求具体方案

时间:2022-12-23 13:56:46浏览次数:42  
标签:方案 12 int 背包 Acwing 字典

Acwing 12. 背包问题求具体方案

01背包问题,但是要求输出 字典序最小的方案数

思路:

状态转移方程: \(f[i][j] = max(f[i - 1][j],f[i - 1][j - v[i]] + w[i])\)

求具体方案其实就是判断每个物品是否被选,求方案其实就是从 \(f[n,m]\) 倒推出来每一个 \(i\) 是否选择。

需要根据转移方程来判断是否选择第 \(i\) 个物品,所以不能滚动。

然后因为这里要求 字典序最小,所以采用贪心的策略。

然后对于第一个物品来说可能有三种情况

  • 只能选——必选
  • 只能不选——必不选
  • 可选可不选——一定要选

显然求字典序最小的时候,我们需要优先考虑编号小的物品,但是找方案的时候,又是从 \(f[n,m]\) 开始回推的,所以我们在求解 \(01\) 背包的时候,从后往前推,就可以从 \(f[1,m]\) 开始往前推了,这样的话,就和求字典序最小的顺序一致了。

#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 5;
int f[N][N], n, m, w[N], v[N];
int main()
{
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i++)
        scanf("%d%d", &v[i], &w[i]);

    for (int i = n; i >= 1; i--)
        for (int j = 0; j <= m; j++)
        {
            f[i][j] = f[i + 1][j];
            if (j >= v[i])
                f[i][j] = max(f[i][j], f[i + 1][j - v[i]] + w[i]);
        }

    int j = m;
    for (int i = 1; i <= n; i++)
    {
        if (j - v[i] >= 0 && f[i][j] == f[i + 1][j - v[i]] + w[i])
        {
            printf("%d ", i);
            j -= v[i];
        }
    }
    return 0;
}

标签:方案,12,int,背包,Acwing,字典
From: https://www.cnblogs.com/zxr000/p/17000512.html

相关文章

  • CSS-属性选择器(推荐常用)-2022-12-23
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>.demoa{float:left;display:block;heigh......
  • 12月份读书笔记1
    对于程序员修炼之道的阅读与感悟出了问题后,要提出各种解决方案的选择,而不是找借口;不要说事情做不到,要说明接下来做什么来挽回局面;我们看到过整洁、运行良好的系统,一旦窗......
  • 2022.12.23
    好崩溃我在博客园上试着搜自己写的实验代码结果搜不到,搜到的全是乱七八糟的也就是说,1、很有可能已经有前辈写了实验的代码,但是我搜不到2、我费了很多劲写的博客不会有......
  • 12月读书笔记2
    学习与阅读《程序员修炼之道》,以下为我的感受与他人交流时,你需要了解你的听众:你想他们学到什么?他们对你讲的什么感兴趣?他们有多富有的经验?他们想要多少细节?你如何促使他们......
  • 12月23日内容总结——csrf跨站请求伪造、校验策略、相关装饰器,auth认证模块及相关操作
    目录一、csrf跨站请求伪造二、csrf校验策略三、csrf相关装饰器四、auth认证模块五、auth认证相关模块及操作六、扩展auth_user表七、作业一、csrf跨站请求伪造钓鱼网站:......
  • 结构伪类选择器-2022-12-23
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>/*结构伪类选择器,不需要特别记住*//*ul的第一个子元素*/......
  • AcWing341. 洛谷P1073, NOIP2009 最优贸易
    AcWing题目传送门洛谷题目传送门题目大意\(~~~~~~\)一个投机倒把的奸商想要通过城市不太健全的贸易系统坑点钱,任意城市都可以买入或者卖出水晶球,他想尽量在便宜的城市买......
  • 力扣每日一题2022.12.23---2011. 执行操作后的变量值
    存在一种仅支持4种操作和1个变量X的编程语言:   ++X和X++使变量X的值加1   --X和X--使变量X的值减1最初,X的值是0给你一个字符串数组operati......
  • CSS-层次选择器-2022-12-23
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>/*p{*//*background:#61e93e;*//*}*//*1.后代......
  • CSS-选择器-2022-12-23
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>/*不遵循就近原则,id选择器>类选择器>标签选择器*/#lr{......