Cod sursa(job #1248761)

Utilizator buzu.tudor67Tudor Buzu buzu.tudor67 Data 25 octombrie 2014 22:23:54
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<fstream>
using namespace std;
ifstream fi("ghiozdan.in");
ofstream fo("ghiozdan.out");
  
const int MAX_N = 20004;
const int MAX_G = 75004;
  
bool este[MAX_G];
int last[MAX_G];
int nr[MAX_G];
int nr_ob[205];
int sol,x,G;
int i,j,k,N;
int suma_actuala;
  
int main(){
    fi>>N>>G;
    for(i=1;i<=N;i++){ 
                      fi>>x;
                      nr_ob[x]++; 
                     }
      
    for(j=1;j<=G;j++) nr[j]=N+5;
    este[0]=1;
    last[0]=0;
    nr[0]=0;
      
    for(i=200;i>0;i--)
    if(nr_ob[i]>0)
       for(j=G-i;j>=0;j--)
       if(este[j])
          for(k=1;k<=nr_ob[i] && j+i*k<=G && nr[j]+k<nr[j+i*k];k++)
          { 
            suma_actuala=j+i*k;
            este[suma_actuala]=1;
            last[suma_actuala]=i;
            nr[suma_actuala]=nr[j]+k;
            if(suma_actuala>sol) sol=suma_actuala;
          }
            
    fo<<sol<<" "<<nr[sol]<<'\n';
      
    while(sol>0){
                 fo<<last[sol]<<'\n';
                 sol-=last[sol];
                }         
      
    fi.close();
    fo.close();
    return 0;
}