2 条题解

  • 0
    @ 2025-10-8 16:51:42
    #include<bits/stdc++.h>
    using namespace std;
    int n, m, a[35], ans;
    void dfs(int sa, int sb, int k)//始终坚持sa不超过m 
    {
        ans=min(ans, m-sa);  
        if(k<=n)
        {
            if(sa+a[k]<=m)dfs(sa+a[k],   sb    ,  k+1);
            dfs(sa     , sb+a[k] ,  k+1);
        }
    }
    int main()
    {
        scanf("%d%d", &m, &n);
        for(int i=1;i<=n;i++) scanf("%d", &a[i]);
        ans=999999999;
        dfs(0,0,1);
        printf("%d\n", ans);
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:51:37
      #include<bits/stdc++.h>
      using namespace std;
      int n,m,a[35],ans;
      void dfs(int sa,int sb,int k)//始终坚持sa不超过m 
      {
          ans=min(ans,m-sa);  
          if(k<=n)
          {
              if(sa+a[k]<=m)dfs(sa+a[k],   sb    ,  k+1);
              dfs(sa     , sb+a[k] ,  k+1);
          }
      }
      int main()
      {
          scanf("%d%d",&m,&n);
          for(int i=1;i<=n;i++) scanf("%d",&a[i]);
          ans=999999999;
          dfs(0,0,1);
          printf("%d\n",ans);
          return 0;
      }
      • 1

      *【递归】平分石头1[NOIP2001普及组]

      信息

      ID
      697
      时间
      1000ms
      内存
      128MiB
      难度
      4
      标签
      递交数
      91
      已通过
      39
      上传者