智慧派蒙 2022-07-11 20:07 采纳率: 75%
浏览 72
已结题

背包问题的加强版有点问题

Description
为了做饭,出题人拿了 k 块钱,准备去买食材。出题人准备买一只螃蟹和若干蔬菜。菜场里有 n 只螃蟹,第 i只螃蟹的价格为 c_i​,美味值为 v_i,菜场里有 m 个蔬菜,第 i 个蔬菜的价格为 w_i,美味值为 p_i​,求出题人的钱能换来最大的美味值。
Input
第一行三个正整数 k,n,m,
接下来 n 行,每行两个正整数 c_i​,v_i,
接下来 m 行,每行两个正整数 w_i​,p_i,
相邻整数均以空格分开
Output
一行一个整数,表示出题人的钱能换来最大的美味值
Sample input
23 2 2
2 3
3 4
10 10
10 10
Sample output
24
Note
all the numbers <= 3000
Time and memory limit
1s ,512M

这——题(连起来还不给我发了)怎么答,貌似是一个01背包的加强版,不过我写的有点问题
这是我写的

#include<bits/stdc++.h>
using namespace std;
int w[1010],v[1010],c[1010],p[1010],b[1010];
int main()
{
    int k,m,n;
    cin>>k>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>c[i]>>v[i];
    }
    for(int i=1;i<=m;i++)
    {
        cin>>w[i]>>p[i];
    }
    for(int ii=1;ii<=n;ii++)
    {
        for(int i=1;i<=m;i++)
        {
            for(int j=k;j>=w[i]+c[ii];j--)
            {
                b[j]=max(b[j],b[j-w[i]]+p[i])+v[ii];
            }
        }
    }
    cout<<b[k];
}

样例能过但其他评测点都错了
急!

  • 写回答

1条回答 默认 最新

  • icehomegre 2022-07-17 16:21
    关注

    你的代码有3个问题:

    1. 没有弄懂背包的实际含义;
    2. 三重循环枚举会时间超限(3000的3次方>1秒最多能运行的次数);
    3. 最大数字为3000,数组却只有1010。
    #include<bits/stdc++.h>
    using namespace std;
    int w[3010],v[3010],c[3010],p[3010],b[3010];//数组要开大一些
    int main()
    {
        int k,m,n;
        cin>>k>>n>>m;
        for(int i=1;i<=n;i++)
        {
            cin>>c[i]>>v[i];
        }
        for(int i=1;i<=m;i++)
        {
            cin>>w[i]>>p[i];
        }
        for(int i=1;i<=m;i++)
        {
            for(int j=k;j>=w[i];j--)
            {
                b[j]=max(b[j],b[j-w[i]]+p[i]);//先处理菜,因为菜可以买任意多个
                //背包板子
            }
        }
        int ans=0;
        for(int i=1;i<=n;i++)
        {
            for(int j=c[i];j<=k;j++)//处理放哪个螃蟹
            {
                ans=max(ans,b[j-c[i]]+v[i]);//取最大值
            }
        }
        printf("%d\n",ans);
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月25日
  • 已采纳回答 7月17日
  • 创建了问题 7月11日

悬赏问题

  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错