2 条题解

  • 0
    @ 2025-10-8 16:55:17
    #include <bits/stdc++.h>
    using namespace std;
    const int N = 2e6;
    int f[N + 10], a[60];
    
    int main() {
        int k, n;
        scanf("%d%d", &k, &n);
        for (int i = 1; i <= n; i++) {
            scanf("%d", &a[i]);
        }
    
        memset(f, 0x0f, sizeof(f));
        f[0] = 0;
        for (int i = 1; i <= n; i++) {
            for (int j = a[i]; j <= N; j++) {
                if (f[j - a[i]] + 1 <= k) {
                    f[j] = min(f[j], f[j - a[i]] + 1);
                }
            }
        }
        for (int i = 1; i <= N; i++) {
            if (f[i] == 0x0f0f0f0f) {
                printf("%d\n", i - 1);
                return 0;
            }
        }
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:54:57
      #include<bits/stdc++.h>
      using namespace std;
      const int N=2e6;
      int f[N+10],a[60];
      int main()
      {
          int k,n;scanf("%d%d",&k,&n);
          for(int i=1;i<=n;i++)scanf("%d",&a[i]);
          
          memset(f,0x0f,sizeof(f));f[0]=0;
          for(int i=1;i<=n;i++)
          {
              for(int j=a[i];j<=N;j++)
              	if(f[j-a[i]]+1<=k)
                  	f[j]=min(f[j],f[j-a[i]]+1);
          }
          for(int i=1;i<=N;i++) 
          {
              if(f[i]==0x0f0f0f0f)
              {
                  printf("%d\n",i-1);
                  return 0;
              }
          }
          return 0;
      }
      • 1

      *【背包练习】[USACO3.1] 邮票 Stamps

      信息

      ID
      1019
      时间
      1000ms
      内存
      128MiB
      难度
      5
      标签
      递交数
      71
      已通过
      30
      上传者