Cod sursa(job #1076792)

Utilizator vyrtusRadu Criuleni vyrtus Data 10 ianuarie 2014 16:23:14
Problema Ghiozdan Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream f("ghiozdan.in");
ofstream g("ghiozdan.out");

int n,gr;
int a[201],item[75001],final[20001];
int rez[75001];

int main()
{
   f >> n >> gr;
    for (int i=1; i<=n;i++)
    {
       int x;
        f >> x;
         a[x]++;
    }

 for (int i=1;i<=gr;i++)
 {
     rez[i] = 0;
     item[i] = 0;
 }
 rez[0] = 1;
 int i,j,k;
   for (i=200;i>=1;--i)
   {
       if (a[i])
       {
          for (k=gr;k>=0 && a[i] >=0 ;k--)
          {
               if ( k-i*a[i] >= 0 && rez[k-i*a[i]] && i>final[k]) { rez[k] = 1; final[k] = i; a[i]--;   }
               if (k-i*a[i] <0 ) a[i]--;
          }
         }
   }


    while (!rez[gr]) {gr--;}
     g << gr << " ";
     int poz=0;
     while (gr)
     {
         poz++;
         item[poz] = final[gr];
         gr -= final[gr];
     }
     g << poz << "\n";
     for (int i=1;i<=poz;++i)
        g << item[i] << "\n";

    return 0;
}