题意详细解释
由于不同的价格对应不同的k,但是恒k<0
大致图像:
只是不同点价格对应斜率不一样,但一个a一定对应一个mmax使得总利润最大
所以我们只要找到一个a的范围使得预期价比两边都大就可以了
输入成本和成本对应销量
pre=成本
while (输入不是结束条件){
差分=(现价销量-上个价格销量)/(现价-上个价格)
for (){
把每个价格的销量填补上
}
}
把预期价的左右一个价格解不等式组:
Min=1.0*((n+1-cost)*s[n+1]-(n-cost)*s[n])/(s[n]-s[n+1]);
Max=1.0*((n-cost)*s[n]-(n-1-cost)*s[n-1])/(s[n-1]-s[n]);
if (最大值和最小值异号){
0是最小值
}else 不异号{
输出绝对值最小的
} #include <bits/stdc++.h>
using namespace std;
int n,cost,sale,pre,c,m,d;
double Max,Min;
int s[10005];
int main(int argc, char** argv) {
cin>>n>>cost>>sale;
pre=cost;
s[cost]=sale;
while(scanf("%d%d",&c,&m),c!=-1&&m!=-1){
int d=(m-s[pre])/(c-pre);
for(int i=pre+1;i<=c;i++){
s[i]=s[i-1]+d;
}
pre=c;
}
cin>>d;
for(pre++;s[pre-1]-d>0;pre++){
s[pre]=s[pre-1]-d;
}
Min=1.0*((n+1-cost)*s[n+1]-(n-cost)*s[n])/(s[n]-s[n+1]);
Max=1.0*((n-cost)*s[n]-(n-1-cost)*s[n-1])/(s[n-1]-s[n]);
if(Min*Max<0){
cout<<0;
}else{
if(fabs(Min)>fabs(Max)) cout<<floor(Max);
else cout<<ceil(Min);
}
return 0;
} 
京公网安备 11010502036488号