Jettblue_jr 2022-12-15 14:43 采纳率: 100%
浏览 32
已结题

关于C++的背包问题,请各方神圣帮本蒟蒻看看

D31s9. 装物品方案(小内存)

时间限制:2.0s 内存限制:16.0MB Special Judge 代码提交间隔:5分钟(现在可以提交)
问题描述
有 件物品,第 件物品的重量为 (整数)。

对于给定的整数 , 请选择一些物品,使得拼出的重量不超过 ,请问在此前提下能拼出的最大重量是多少?具体的方案是怎样的?

输入格式
输入的第一行包含一个整数 ,表示物品数量。

第二行包含 个整数 , , , ,分别为每个物品的重量。

最后一行包含一个整数 。

输出格式
输出的第一行包含一个整数 ,表示答案。

第二行包含一个整数 ,表示要选择的物品个数。

第三行包含 个整数,为每个选择的物品的编号,按照从小到大的顺序输出,相邻整数之间使用一个空格分隔。

样例输入
3
4 4 6
12
Data
样例输出
10
2
1 3
Data
以下答案也正确

10
2
2 3

这道背包问题我一开始打算用回溯做,但会超时和错误,现在打算还是老老实实用背包做,请各方神圣帮本蒟蒻看看吧!
急!在线蹲答案!

  • 写回答

1条回答 默认 最新

  • _L.Y.H._ 2022-12-17 10:05
    关注

    这是背包的模板,你看着改下吧,不懂的看下这篇文章:https://blog.csdn.net/aliyonghang/article/details/128047851

    
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int N=1010;
    int n,m;
    int v[N],w[N];//v数组存储体积,w数组存储价值
    int f[N][N];
    int main ()
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++) cin>>v[i]>>w[i];
        
        for(int i=1;i<=n;i++)
            for(int j=0;j<=m;j++)
                {
                    f[i][j]=f[i-1][j];//将不能放入第i件物品的情况和能放入但是没放入的情况合并
                    if(j>=v[i]) f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i]);
                }
        cout<<f[n][m]<<endl;
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月1日
  • 已采纳回答 12月24日
  • 修改了问题 12月15日
  • 创建了问题 12月15日

悬赏问题

  • ¥15 请问为什么我配置IPsec后PC1 ping不通 PC2,抓包出来数据包也并没有被加密
  • ¥200 求博主教我搞定neo4j简易问答系统,有偿
  • ¥15 nginx的使用与作用
  • ¥100 关于#VijeoCitect#的问题,如何解决?(标签-ar|关键词-数据类型)
  • ¥15 一个矿井排水监控系统的plc梯形图,求各程序段都是什么意思
  • ¥15 ensp路由器启动不了一直报#
  • ¥50 安卓10如何在没有root权限的情况下设置开机自动启动指定app?
  • ¥15 ats2837 spi2从机的代码
  • ¥200 wsl2 vllm qwen1.5部署问题
  • ¥100 有偿求数字经济对经贸的影响机制的一个数学模型,弄不出来已经快要碎掉了