爱吃瓜子的克鲁克山 2023-01-22 00:21 采纳率: 30%
浏览 5
已结题

AtCoder ABC 268 D

AtCoder ABC 268 D
有1个wa,2个re
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n,x,max=0;
    cin>>n>>x;
    int a[n],b[n];
    for(int i=0;i<n;++i)
    {
        cin>>a[i]>>b[i];
        max+=a[i]*b[i];
    }
    bool m[max+1]={1};
    for(int i=0;i<n;++i)
    {
        for(int j=0;j<b[i];++j)
        {
            for(int k=max;k>=a[i];--k)
            {
                if(m[k-a[i]])
                {
                    m[k]=1;
                }
            }
        }
    }
    cout<<(m[x]?"Yes":"No");
    return 0;
}

hard03 wa hard 09 re rand 03 re
试过map,但tle,用bool打标记,但会re
能帮忙调一下吗?
  • 写回答

2条回答 默认 最新

  • Rednblack· 2023-01-25 12:19
    关注

    这段代码是一种背包问题的实现,它使用了一维bool数组来存储每种物品是否被选中。但是由于数组的大小是确定的,所以如果最大物品数量过大就会导致空间不足,导致RE。

    解决方案是使用动态数组,如std::vector。

    如果你在使用map时TLE了,那是因为map是一种高度封装的数据结构,它在插入和查询数据时需要进行额外的操作,因此会比使用数组慢很多。

    另外,在背包问题中,我们通常使用01背包问题的解法,这是一种基于动态规划的解法,这种解法是在O(nx)的时间复杂度内解决问题的,而完全背包问题的复杂度是O(nx*x)的。所以我建议你换一种方法。

    代码如下:

    #include<iostream>
    #include<vector>
    using namespace std;
    int main(){
        int n,x,max=0;
        cin>>n>>x;
        vector<int> a(n),b(n);
        for(int i=0;i<n;++i)
        {
            cin>>a[i]>>b[i];
            max+=a[i]*b[i];
        }
        vector<bool> m(max+1,false);
        m[0]=true;
        for(int i=0;i<n;++i)
        {
            for(int j=0;j<b[i];++j)
            {
                for(int k=max;k>=a[i];--k)
                {
                    if(m[k-a[i]])
                    {
                        m[k]=true;
                    }
                }
            }
        }
        cout<<(m[x]?"Yes":"No");
        return 0
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月24日
  • 已采纳回答 2月16日
  • 创建了问题 1月22日

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题