您的位置:首页 > 其它

勇者斗恶龙

2016-06-12 23:47 183 查看
有n个头的恶龙,m个骑士可以雇佣,

一个能力值为x的勇士可以砍掉直径不超过x的头,且需要佣金x个金币,

如何雇佣骑士砍掉所有的头使支付金币最少(一个骑士只能砍一个头)

int main()
{
int n,m,temp,sum;
int x[20],e[20];
while(scanf("%d %d",&n,&m)&&n!=0&&m!=0)
{
int ***k=-1;***
//k=-1的赋值的位置比较重要
for(int i=0; i<n; i++)
scanf("%d",&e[i]);
for(int i=0; i<m; i++)
scanf("%d",&x[i]);
for(int i=0; i<n; i++)
for(int j=i+1; j<n; j++)//将给出的e
,x[m]按从大到小冒泡排序
{
if(e[i]<e[j])
{
temp=e[i];
e[i]=e[j];
e[j]=temp;
}
}

for(int i=0; i<m; i++)
for(int j=i+1; j<m; j++)
{
if(x[i]<x[j])
{
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
}
**sum=0**;//sum=0的赋值位置确定
for(int i=0; i<n; i++)
{
**if(k==-2)//和后面k=-2时的break一起,可以跳出二重循环
break;**
k=-2;
for(int j=0; j<m; j++)
{
if((e[i]<=x[j])&&(x[j]!=0))//头i<=xj且xj没有被雇佣过
k=j;
}
**if(k==-2)**
{
printf("Loowater is doomed!\n");
**break;**
}

sum+=x[k];
x[k]=0;//用0标记xj,表示其被雇佣过
if(i==n-1)
printf("%d\n",sum);
}

return 0;
}


/*输入输出示例

输入:

2 3

5

4

7

8

4

2 1

5

5

10

0 0

输出:

11

Loowater is doomed!

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: