1005 装载问题

来源:互联网 发布:新三板源码 编辑:程序博客网 时间:2024/05/29 16:27
#include<stdio.h>


int find(int n);
int max();


int weight[100000]={0};
int s[100]={0};
int tmp,num=1;
int c[3],n,w[100];
int save[1000]={0},nn=1;
int sum=0;




int main()
{
int i;
while(1)
{
sum=0;
scanf("%d %d %d",&c[1],&c[2],&n);
tmp=n;
if(c[1]==0&&c[2]==0&&n==0)
{
break;
}
for(i=1; i<=n; i++)
{
scanf("%d",&w[i]);
sum=sum+w[i];
}
num=1;
for(i=1; i<1000; i++)
{
weight[i]=0;
}
find(n);
max();
}
for(i=1; i<nn; i++)
{
if(save[i]==1)
{
printf("Yes\n");
}
else
{
printf("No\n");
}

}
return 0;
}




int find(int n)
{
int i;
if(n==0)
{
for(i=1; i<=tmp; i++)
{
weight[num]=weight[num]+w[i]*s[i];
}
if(weight[num]<=c[1])
{
num++;
}
else
{
weight[num]=0;
}

}
else
{
for(i=0; i<2; i++)
{
s[n]=i;
find(n-1);
}
}
}




int max()
{
int i,j,flag;
for(i=1; i<num; i++)
{
flag=1;
for(j=1; j<num; j++)
{
if(weight[i]<weight[j])
{
flag=0;
break;
}
}
if(flag==1)
{


if((sum-weight[i])<=c[2])
{
save[nn]=1;
nn++;
break;
}
else
{
save[nn]=0;
nn++;
break;
}
}

}
}
原创粉丝点击