18北邮网研院-D.最大价值

题目

题目描述
对于每一个零件都有一个适宜温度区间,[Ri,Ji],当温度tJi,零件价值为z;当温度适宜,价值为y。且y>x,y>z。此刻,有一恒温箱,可确定温度t。

输入
第一行按顺序分别为 n,x,y,z。0 接下来n行为 每一个零件的适宜温度区间0

输出
确定一个温度值t,在这温度下所有零件的总价值最大,并输出该价值

样例输入
3 1 3 2
1 4
2 5
7 10

样例输出
7

思路:

因为存在大量不连续的点,所以暴力行不通,借鉴大佬的思维,只对左中右三个状态进行判断就行,初始化为一个状态,只要判断左右端点两个状态即可,很妙啊.附上链接
链接:https://blog.csdn.net/G_Meteor/article/details/104213615

代码

#include 
using namespace std;
/*
3 1 3 2
1 4
2 5
7 10
输出
7  
*/
struct Type{
	int value;
	int flag;
	bool operator<(const Type&c)const{
		return value>n>>x>>y>>z;
	for(int i=0;i>arr[2*i].value;//左端点就是新状态了
		cin>>arr[2*i+1].value; //这里是个坑,到右端点,仍然不是新状态,右端点加一才是 
		arr[2*i+1].value++; 
		arr[2*i].flag=0;
		arr[2*i+1].flag=1;
	}
	sort(arr,arr+2*n);
	int sum=n*x;
	int maximum=0;
	for(int i=0;i<2*n;i++)
	{
		if(arr[i].flag==0) sum+=y-x;
		else sum+=z-y;
		maximum=max(maximum,sum);
	}
	cout<

你可能感兴趣的:(区间贪心)