Description
田忌和齐王赛马,两人各出n匹马,赢一场比赛得200两银子,输了赔200银子,平局不赔不赚.已知两人每匹马的速度,问田忌最多能赢多少银子.
Input
多组测试数据,
每组数据的第一行是一个整数n。 (1<=n<=1000)
第二行包括n个整数既田忌每匹马的速度.
第三行包括n个整数既齐王每匹马的速度.
每匹马的速度不超过1000.
Output
对于每组数据输出一行有一个整数代表田忌最多能赢多少银子
Sample Input
3
92 83 71
95 87 74
2
20 20
20 20
2
20 19
22 18
Sample Output
200
0
0
参考博客https://blog.csdn.net/qq_41489727/article/details/80410707
https://blog.csdn.net/qq_38735931/article/details/81190585
【思路】贪心方法:
1.当田忌最慢的马比齐王最慢的马快,赢一场先
2.当田忌最慢的马比齐王最慢的马慢,和齐王最快的马比,输一场
3.当田忌最快的马比齐王最快的马快时,赢一场先。
4.当田忌最快的马比齐王最快的马慢时,拿最慢的马和齐王最快的马比,输一场。
5.当田忌最快的马和齐王最快的马相等时,拿最慢的马来和齐王最快的马比.
#include
using namespace std;
const int maxn=1010;
int a[maxn],b[maxn];
bool cmp(int a,int b){//降序
return a>b;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
int i,j,lena,lenb;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(i=0;ib[lenb]){//如果田忌最慢的马比齐王最慢的马快,那么赢一场。
sum++;
lena--;
lenb--;
}
else if(a[i]>b[j]){ //如果田忌最快的马比齐王最快的马快,也赢一场
sum++;
i++;
j++;
}
else{//.如果田忌最慢的马比齐王最慢的马慢或者最快的比最快的慢,那么田忌最慢的干齐王最快的,这样肯定会输,除了相等的情况。
if(a[lena]!=b[j])sum--;
lena--;j++;
}
}
cout<
#include
#include
#include
using namespace std;
const int maxn = 1010;
int a[maxn],b[maxn];
int main()
{
int n;
while(~scanf("%d",&n)&&n)
{
int ans = 0;
for(int i=0;i=j;i--)
{
if(a[q]<=b[i])//最快的马比齐王的慢或打平,则比较最慢的马
{
while(a[f]>b[j]) //最慢的马和齐王的最慢的马比较
{
ans +=200;
f++; j++;
}
//最慢的马和齐王最快的马比较
if(a[f]
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部。
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关最求解。