Cod sursa(job #2515150)

Utilizator ivan.tudorIvan Tudor ivan.tudor Data 27 decembrie 2019 22:00:24
Problema Ghiozdan Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include<cstdio>
using namespace std;
const int N=205;
const int NMAX=75005;
int fr[N],dp[NMAX];
struct ajutorsol{
  int val,sz;
};
ajutorsol last[NMAX];
int main()
{
  FILE*fin,*fout;
  fin=fopen("ghiozdan.in","r");
  fout=fopen("ghiozdan.out","w");
  int n,g;
  fscanf(fin,"%d%d",&n,&g);
  for(int i=1;i<=n;i++){
    int a;
    fscanf(fin,"%d",&a);
    fr[a]++;
  }
  for(int i=200;i>0;i--){
    if(fr[i]){
      for(int j=g;j>=0;j--){
        if(dp[j] || j==0){
          for(int k=1;k<=fr[i] && k*i+j<=g;k++){
            if(dp[j+k*i]==0){
              last[j+k*i]={i,k};
              dp[j+k*i]=dp[j]+k;
            }
          }
        }
      }
    }
  }
  int gmax=g;
  while(dp[gmax]==0 && gmax>0){
    gmax--;
  }
  fprintf(fout,"%d %d\n",gmax,dp[gmax]);
  while(gmax){
    int sz=last[gmax].sz;
    while(sz--){
      fprintf(fout,"%d\n",last[gmax].val);
    }
    gmax=gmax-last[gmax].val*last[gmax].sz;
  }
  return 0;
}