一句话概括题意:求最大总利润。
思路:暴力枚举!!!!!!!
首先我们有三种不同的选择,然后预处理好
st[i]=j;表示的是某个单位的单价现在售出了多少东西
然后将三种情况一一枚举即可。
#include<cstdio>
#include<cstring>
using namespace std;
int st[100005],ans=0;
int last,next,ad,d,n,yuqijia,bas,maxx,a,b,c;
int main()
{
scanf("%d",&yuqijia);
int p,q;
scanf("%d%d",&p,&q);//取一个值来作为标准
st[p]=q;
maxx=p;
while(scanf("%d%d",&a,&b)!=EOF)//读入的操作,st[i]=b,表示的是某价位的单价现在销售出了b部
{
if(a==-1&&b==-1) break;
st[a]=b;
maxx=max(maxx,a);//取最大值
}
scanf("%d",&ad);
if(st[yuqijia]==0)
{
if(maxx<yuqijia)//如果预期值比原来给的值还要大
{
st[yuqijia]=st[maxx]-(yuqijia-maxx)*ad;//那么就将当前预期值弄出一个价位
maxx=yuqijia;
}
if(yuqijia<maxx)
{
st[yuqijia]=st[maxx]+(maxx-yuqijia)*ad;//换顺序
}
}
next=yuqijia+1;
last=yuqijia-1;//取上一个和下一个并且慢慢养生
if(st[last]==0)//每升高一块钱你就加上当前的销量
{
st[last]=st[yuqijia]+ad;
}
if(st[next]==0)//每减少一块钱你就减掉当前的销量
{
st[next]=st[yuqijia]-ad;
}
int x=st[yuqijia],y=st[last],z=st[next];//x是预期值的销量,以此类推。
while(a<b||a<c)
{
a=(yuqijia-bas)*x;
b=(last-bas)*y;
c=(next-bas)*z;
if(b>a)
{
ans--;
yuqijia--;last--;next--;
}
else if(c>a)
{
ans++;
yuqijia++;last++;next++;
}
}
printf("%d\n",ans);
return 0;
}
BY ZZJ