1 solutions

  • 0
    @ 2025-11-5 17:59:38

    C++ :

    #include <stdio.h>
    #include <memory.h>
    
    double sum,r[100];
    int i,j,k,m,n, R[100], prev[20001], who[20001];
    char tmp[1000];
    
    main(){
       while (1 == scanf("%d",&n) && n) {
          for (i=0;i<n;i++) scanf("%lf",&r[i]);
          for (i=sum=0;i<n;i++) sum += r[i];
          for (i=0;i<n;i++) R[i] = r[i] * 20000/sum;
          memset(who,0,sizeof(who));
          memset(prev,0,sizeof(prev));
          who[0] = -1;
          for (i=0;i<n;i++) {
             for (j=10000;j>=0;j--) {
                if (!who[j]) continue;
                if (who[j+R[i]]) continue;
                who[j+R[i]] = i+1;
                prev[j+R[i]] = j;
             }
          }
          for (i=10000;!who[i];i--);
          while (i) {
             printf("%d ", who[i]);
             i = prev[i];
          }
          printf("\n");
       }
       if (n != 0) printf("missing end delimeter\n");
    }
    
    /**************************************************************
    	Problem: 1217
    	User: zhblue
    	Language: C++
    	Result: Compile Error
    ****************************************************************/
    
    
    
    • 1

    Information

    ID
    18701
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By