2 条题解

  • 0
    @ 2025-10-8 16:51:54
    #include<bits/stdc++.h>
    using namespace std;
    const int N=151;
    int a[N],f[N*1000],rt[N*1000];
    int main()
    {
        int m;scanf("%d",&m);
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    
        memset(f,0,sizeof(f));f[0]=1;
        for(int i=1;i<=n;i++)
            for(int j=m;j>=a[i];j--)if(f[j]<=1)
                f[j]+=f[j-a[i]];
            
        if(f[m]>1) puts("-1");
        else if(f[m]==0) puts("0");
        else
    	{
            int now=m;
            for(int i=1;i<=n;i++)
    		{
                if(f[now-a[i]]&&now-a[i]>=0) now-=a[i];
                else printf("%d ",i);
            }
        }
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:51:48
      #include<bits/stdc++.h>
      using namespace std;
      const int N=151;
      int a[N],f[N*1000],rt[N*1000];
      int main()
      {
          int m;scanf("%d",&m);
          int n;scanf("%d",&n);
          for(int i=1;i<=n;i++)scanf("%d",&a[i]);
      
          memset(f,0,sizeof(f));f[0]=1;
          for(int i=1;i<=n;i++)
              for(int j=m;j>=a[i];j--)if(f[j]<=1)
                  f[j]+=f[j-a[i]];
              
          if(f[m]>1) puts("-1");
          else if(f[m]==0) puts("0");
          else
      	{
              int now=m;
              for(int i=1;i<=n;i++)
      		{
                  if(f[now-a[i]]&&now-a[i]>=0) now-=a[i];
                  else printf("%d ",i);
              }
          }
          return 0;
      }
      • 1

      信息

      ID
      723
      时间
      1000ms
      内存
      128MiB
      难度
      6
      标签
      递交数
      86
      已通过
      29
      上传者