Cod sursa(job #985039)

Utilizator stefanzzzStefan Popa stefanzzz Data 16 august 2013 12:05:10
Problema Zebughil Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <fstream>
#include <set>
#include <vector>
#define MAXN 20
using namespace std;
ifstream f("zebughil.in");
ofstream g("zebughil.out");


struct Comp{
    bool operator()(pair<int,int> a,pair<int,int> b){
        return a.first>b.first;}};


int t=3,n,G,v[MAXN],ramase,x,sol;
set<pair<int,int>,Comp> s;
set<pair<int,int>,Comp>::iterator it;
vector< pair<int,int> > a;
bool dus[MAXN];

int main()
{
    int i;
    while(t--){
        f>>n>>G;
        for(i=1;i<=n;i++){
            f>>v[i];
            dus[i]=0;}
        ramase=n;
        sol=0;
        while(ramase){
            s.clear();
            s.insert(make_pair(0,0));
            sol++;
            for(i=1;i<=n;i++){
                if(dus[i])
                    continue;
                it=s.end();
                it--;
                for(it;;it--){
                    x=(*it).first+v[i];
                    if(x>G)
                        break;
                    a.push_back(make_pair(x,i));
                    if(it==s.begin())
                        break;}
                while(!a.empty()){
                    s.insert(a.back());
                    a.pop_back();}}
            it=s.begin();
            x=(*it).first;
            while(1){
                dus[(*it).second]=1;
                ramase--;
                x-=v[(*it).second];
                if(!x)
                    break;
                it=s.find(make_pair(x,0));}}
        g<<sol<<'\n';}
    f.close();
    g.close();
    return 0;
}