2 条题解

  • 0
    @ 2025-10-31 15:58:40

    感谢TPPDXM的题解,讲的非常透彻,这里简单列几个注意事项: 1.用于dp的数组容量要够 2.因为是每个元素最多取一次,所以内层循环从后往前遍历。

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        int n,sum;scanf("%d %d",&n,&sum);
        vector<int> shuzu(n);
        vector<bool> panduan(sum+1,false);
        int total=0;
        for(int i=0;i<n;i++){
            scanf("%d",&shuzu[i]);
            total+=shuzu[i];
        }
    
        if(total<sum){
            printf("NO");
            return 0;
        }
        panduan[0]=true;
        for(int i:shuzu){
            for(int j=sum;j>=i;j--){
                if((j-i)>=0&&panduan[j-i]){
                    panduan[j]=true;
                }
            }
        }
    
        if(panduan[sum]){
            printf("YES");
        }
        else{
            printf("NO");
        }
        return 0;
    }
    

    信息

    ID
    205
    时间
    10ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    18
    已通过
    7
    上传者