蓝桥杯三国游戏(贪心)

贪心:不是从整体上考虑最优解,而是从局部考虑,类似dp贪心的决策是需要有无后效性的,且局部最优解可以推到整体最优 

蓝桥杯三国游戏(贪心)_第1张图片

3
1 2 2
2 3 2
1 0 7
2

分析: 本题的意思是选择几个事件(可不连续),使得某一个国家胜利,但是具体是哪一个国家胜利呢 ,一共是三种可能,可以分别枚举,其思路和蓝桥杯接龙游戏是一样(对每个时间都有选或不选)但会超时CSDNhttps://mp.csdn.net/mp_blog/creation/editor/145415354

贪心的做法也是一样的,如果一起求就没有明确的目标,会很混乱,所以分成三个小任务分别完成,最后再取事件的最大值。贪心思路:(假设a赢)s=sum_a[i]-sum_b[i]-sum_c[i]>0, 只要对s进行排序,依次加起来加到某个数使s为负数(因为事件的发生可不连续)。

#include
using namespace std;
#define int long long
int n;
int f(vector&a,vector&b,vector&c)
{
	int count=0,sum=0;
	vector s(n);
	for(int i=0;i());//vector从大到小排序 
	for(int i=0;i0)
		{
			sum+=s[i];
			count++;
		}
		else break;//接着循环没有意义 
	}
	return count;
}
signed main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n;
	vector a(n);
    vector b(n);
    vector c(n); 
	for(int i=0;i>a[i];
	}
	for(int i=0;i>b[i];
	}for(int i=0;i>c[i];
	}
	int ans=0;
	ans=f(a,b,c);
	ans=max(ans,f(b,a,c));
	ans=max(ans,f(c,b,a));//比较三个数大小 
	cout<

 

你可能感兴趣的:(游戏)