题目
题目描述
对于每一个零件都有一个适宜温度区间,[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<