1 条题解

  • 0
    @ 2025-2-14 21:09:17

    C++ :

    #include<iostream>  
    #include<cstdio>  
    using namespace std;  
      
    #define  M 100  
    class SumOfSub  
    {  
        friend  void sumofsub();  
        private:  
          void Backtrack(int t);  
          int count;  
          int n;  
          int c;  
          int cw;  
          int x[M];  
          int bestx[M];  
          int num[M];  
    };  
      
      
    void SumOfSub::Backtrack(int t)  
    {//搜索t第层  
        int i,j;  
        if(t>n)//到达叶子节点  
        {  
            if(cw == c && count ==0)  
            {  
                count++;  
                for(i=1;i<=n;i++)  
                {  
                    if(x[i]==1)  
                    {  
                        printf("%d ",num[i]);  
                    }  
                }  
                printf("\n");  
            }  
            return;  
        }  
        else  
        {  
            if(cw+num[t]<= c)  
            {  
                cw+=num[t];  
                x[t]=1;  
                Backtrack(t+1);  
                cw-=num[t];  
            }  
            x[t]=0;  
            Backtrack(t+1);  
        }  
    }  
      
    void sumofsub()  
    {  
        int i,j;  
        SumOfSub s;  
        s.cw = 0;  
        s.count =0;  
        scanf("%d %d",&s.n,&s.c);  
        for(j=1;j<=s.n;j++)  
        {  
            scanf("%d",&s.num[j]);  
        }  
        for(j=1;j<=s.n;j++)  
        {  
            s.x[j]=0;  
        }  
        s.Backtrack(1);  
         if(s.count == 0)  
         {  
             printf("No Solution!");  
         }  
    }  
      
    int main()  
    {  
        sumofsub();  
        return 0;  
    }  
    
    • 1

    信息

    ID
    671
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者