Pagini recente » Cod sursa (job #1641506) | Cod sursa (job #1246225) | Cod sursa (job #333728) | Cod sursa (job #2301775) | Cod sursa (job #377924)
Cod sursa(job #377924)
#include <iostream>
#include <fstream>
//#include <conio.h>
using namespace std;
int b[100000], p[100000];
int main() {
fstream f1, f2;
int semn[18], e[100000], n, g, i, j, q, m, k;
f1.open("zebughil.in", ios::in);
f2.open("zebughil.out", ios::out);
for(k=1; k<=3; k++) {
f1>>n>>g;
for(i=1; i<=(1<<n)-1; i++) {
b[i]=99999999; p[i]=99999999;
}
for(i=1; i<=n; i++) {
f1>>e[i];
b[1<<(n-i)]=g-e[i];
p[1<<(n-i)]=1;
}
for(i=1; i<=(1<<n)-1; i++) {
q=i;
//cout<<b[i]<<" -> "<<p[i]<<endl;
/**
for(j=1; j<=n; j++) {
semn[j]=q%2; q=q/2;
}
**/
for(j=1; j<=n; j++) {
semn[n-j+1]=q%2; q=q/2;
}
for(j=1; j<=n; j++) {
//semn[j]==0
if(semn[j]==0) {
if(b[i]>=e[j]) {
if(p[i+(1<<(n-j))]>p[i]) {
b[i+(1<<(n-j))]=b[i]-e[j];
p[i+(1<<(n-j))]=p[i];
}
else if(p[i+(1<<(n-j))]==p[i] && b[i+(1<<(n-j))]>b[i]) {
b[i+(1<<(n-j))]=b[i]-e[j];
p[i+(1<<(n-j))]=p[i];
}
}
else {
if(p[i+(1<<(n-j))]>p[i]+1) {
b[i+(1<<(n-j))]=max(b[i], g-e[j]);
p[i+(1<<(n-j))]=p[i]+1;
}
else if(p[i+(1<<(n-j))]==p[i]+1 && b[i+(1<<(n-j))]>b[i]) {
b[i+(1<<(n-j))]=max(b[i], g-e[j]);
p[i+(1<<(n-j))]=p[i]+1;
}
}
}
}
}
/**
for(i=1; i<=(1<<n)-1; i++) {
cout<<b[i]<<" - "<<p[i]<<endl;
}
**/
f2<<p[(1<<n)-1]<<endl;
//cout<<endl;
}
f1.close(); f2.close();
//getch();
return 0;
}