勇者鬥惡龍
阿新 • • 發佈:2019-01-04
有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[n],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!
*/