Pagini recente » Cod sursa (job #2715721) | Cod sursa (job #1221011) | Cod sursa (job #2831709) | Cod sursa (job #445575) | Cod sursa (job #377927)
Cod sursa(job #377927)
#include <iostream>
#include <fstream>
//#include <conio.h>
using namespace std;
long long b[132000], p[132000];
int main() {
fstream f1, f2;
long long semn[18], e[132000], 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]=2000000002; p[i]=2000000002;
}
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))]=max(b[i]-e[j], b[i+(1<<(n-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))]=max(b[i+(1<<(n-j))], 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;
}