Pagini recente » Cod sursa (job #150267) | Cod sursa (job #1010499) | Cod sursa (job #1209822) | Cod sursa (job #433495) | Cod sursa (job #993423)
Cod sursa(job #993423)
#include <fstream>
#define MAXN 20
#define MAXCOD 132000
#define INF 2000000000
using namespace std;
ifstream f("zebughil.in");
ofstream g("zebughil.out");
int t=3,n,G,v[MAXN],pd[MAXCOD],ramas[MAXCOD],cod,x,y;
bool mb[MAXN];
bool nextcomb();
int main(){
int i,j;
while(t--){
f>>n>>G;
for(i=0;i<(1<<n);i++)
pd[i]=INF;
for(i=0;i<n;i++){
f>>v[i];
pd[1<<i]=1;
ramas[1<<i]=G-v[i];}
for(i=2;i<=n;i++){
cod=0;
for(j=0;j<i;j++){
mb[j]=1;
cod+=(1<<j);}
do{
for(j=0;j<n;j++)
if(mb[j]){
x=pd[cod-(1<<j)];
y=ramas[cod-(1<<j)]-v[j];
if(y<0){
x++;
y=G-v[j];}
if(x<pd[cod]||(x==pd[cod]&&y>ramas[cod])){
pd[cod]=x;
ramas[cod]=y;}}}
while(nextcomb());}
g<<pd[(1<<n)-1]<<'\n';}
f.close();
g.close();
return 0;
}
bool nextcomb(){
int i,cnt=0;
for(i=n-1;mb[i];i--,cnt++){
mb[i]=0;
cod-=(1<<i);}
for(i;i>=0&&!mb[i];i--);
if(i<0)
return 0;
mb[i]=0;
mb[i+1]=1;
cod+=(1<<i);
for(i=i+2;cnt;i++,cnt--){
mb[i]=1;
cod+=(1<<i);}
return 1;}