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 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)