camellia 2023-07-02 21:11 采纳率: 25%
浏览 25
已结题

二维费用背包,有一个小问题


#include<iostream>
using namespace std;
int v[1005],m[1005],w[1005];
int dp[1005][1005];
int main()
{
    int N,V,M;
    cin>>N>>V>>M;
    for(int i=1;i<=N;i++)cin>>v[i]>>m[i]>>w[i];
    
    for(int k=1;k<=N;k++)
    {
        for(int i=V;i>=0;i--)
        {
            for(int j=M;j>=0;j--)
            {
                //dp[i][j]=dp[i-1][j];
                if(i>=v[k]&&j>=m[k])dp[i][j]=max(dp[i][j],dp[i-v[k]][j-m[k]]+w[k]);
            }
        }
    }
    cout<<dp[V][M]<<"\n";
    return 0;
}

```c++
#include<iostream>
using namespace std;
int v[1005],m[1005],w[1005];
int dp[1005][1005];
int main()
{
    int N,V,M;
    cin>>N>>V>>M;
    for(int i=1;i<=N;i++)cin>>v[i]>>m[i]>>w[i];
    
    for(int k=1;k<=N;k++)
    {
        for(int i=V;i>=0;i--)
        {
            for(int j=M;j>=0;j--)
            {
                //dp[i][j]=dp[i-1][j];
                if(i>=v[k]&&j>=m[k])dp[i][j]=max(dp[i][j],dp[i-v[k]][j-m[k]]+w[k]);
            }
        }
    }
    cout<<dp[V][M]<<"\n";
    return 0;
}


注释掉的部分不懂,为什么要注释掉

  • 写回答

3条回答 默认 最新

  • 鱼香rose__ 2023-08-07 16:20
    关注

    因为你的程序已经将01背包一维优化过,所以不需要进行你注释的那一部分的状态转移过程,而二维费用背包就是在01背包的基础上添加了一个限制,只需枚举当前容量(V)时,枚举所有的(M)。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月16日
  • 已采纳回答 8月8日
  • 创建了问题 7月2日

悬赏问题

  • ¥15 鼠标右键,撤销删除 复制 移动,要怎样删除
  • ¥15 使用MATLAB进行余弦相似度计算加速
  • ¥15 服务器安装php5.6版本
  • ¥15 我想用51单片机和数码管做一个从0开始的计数表 我写了一串代码 但是放到单片机里面数码管只闪烁一下然后熄灭
  • ¥20 系统工程中,状态空间模型中状态方程的应用。请猛男来完整讲一下下面所有问题
  • ¥15 我想在WPF的Model Code中获取ViewModel Code中的一个参数
  • ¥15 arcgis处理土地利用道路 建筑 林地分类
  • ¥20 使用visual studio 工具用C++语音,调用openslsx库读取excel文件的sheet问题
  • ¥100 寻会做云闪付tn转h5支付链接的技术
  • ¥15 DockerSwarm跨节点无法访问问题