A - 卡牌遊戲 III

xiongtao1231發表於2020-12-05

在這裡插入圖片描述
在這裡插入圖片描述
思路:題目要求任意選擇n張卡組成一套卡組,卡組中每張卡牌的生命值之和乘與卡組中最小的魔法值。那麼我們就按魔法值來對卡組排序(從大到小),這樣我們就不用記錄卡組的最小魔法值,用結構陣列來記錄資料,這樣我們對魔法值排序的時保證裡其所對應的生命值不變。(我們用sort函式排序,標頭檔案為 algorithm,預設為從小到大排序),遍歷結構陣列,累加生命值並乘與當前魔法值,對比並記錄最大傷害。
注意:資料型別應該用 long long

#include<iostream>
#include<algorithm>
using namespace std;
struct card{
	long long hp;//生命值 
	long long mp;//魔法值 
};
bool cmp(card s,card ss)
{
	return(s.mp>ss.mp);	//讓結構陣列按魔法值從大到小排序 
}
int  main()
{
	int n,i,j;
	cin>>n;
	card s[n];//定義結構陣列
	for(i=0;i<n;i++)
	{
		cin>>s[i].hp>>s[i].mp;
	}
	sort(s,s+n,cmp);//讓結構陣列按魔法值從大到小排序 
	long long sum=0,max=0,hp=0;

	for(i=0;i<n;i++)
	{
		hp+=s[i].hp;
		sum = hp*s[i].mp;//傷害 
		if(sum>max)
		{//比較並記錄最大傷害 
			max = sum;
		}	
	}
	cout<<max;
	return 0;
}

相關文章