Pagini recente » Cod sursa (job #2711161) | Cod sursa (job #894864) | Cod sursa (job #3244452) | Cod sursa (job #927985) | Cod sursa (job #493559)
Cod sursa(job #493559)
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
queue<int>q1,q2;
int a[ 1<<18 ][ 19 ],P,g[ 18 ],G,i,j,k,l,m,n;
void solve(){
memset(a,0,sizeof(a));
while(!q1.empty())
{q1.pop();
q2.pop();
}
P=0;
for(i = 0 ; i < n ; i++)
{a[1<<i][1] = g[i+1];
P++;
q1.push(1<<i);
q2.push(1);
}
int x,y,I,J,val;
while(P){
x = q1.front();
y = q2.front();
for(i = 0; i < n ; i++)
if(!(1&(x>>i)))
{I = x + (1<<i);
val = a[x][y] + g[i+1];
if(val > G)
{J = y+1;
val = g[i+1];
}
else
J = y;
if(!a[I][J])
{a[I][J] = val;
P++;
q1.push(I);
q2.push(J);
}
else
if(a[I][J] > val)
a[I][J] = val;
}
P--;
q1.pop();
q2.pop();
}
}
void afis(){
int i,N;
N = (1<<n)-1;
for(i = 1 ; i <= n ; i++)
if(a[N][i]){
printf("%d\n",i);
return;
}
}
void citire(){
int i;
freopen("zebughil.out","w",stdout);
freopen("zebughil.in","r",stdin);
scanf("%d %d",&n,&G);
for(i = 1 ; i <= n ; i++)
scanf("%d",&g[i]);
solve();
afis();
scanf("%d %d",&n,&G);
for(i = 1 ; i <= n ; i++)
scanf("%d",&g[i]);
solve();
afis();
scanf("%d %d",&n,&G);
for(i = 1 ; i <= n ; i++)
scanf("%d",&g[i]);
solve();
afis();
}
int main(){
citire();
return 0;}