Pagini recente » Cod sursa (job #2538291) | Cod sursa (job #2456901) | Cod sursa (job #615581) | Cod sursa (job #361608) | Cod sursa (job #985039)
Cod sursa(job #985039)
#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;
}