Cod sursa(job #2515158)

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