poj 1649 Market Place

来源:互联网 发布:win10反间谍软件关闭 编辑:程序博客网 时间:2024/06/07 00:46

题目链接:http://poj.org/problem?id=1649

题目思路:枚举加离散化。

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<string>#include<queue>#include<algorithm>#include<vector>#include<stack>#include<list>#include<iostream>#include<map>using namespace std;#define inf 0x3f3f3f3f#define Max 110int max(int a,int b){return a>b?a:b;}int min(int a,int b){return a<b?a:b;}int n;int pri[210],price[210],p[210],rat[210];int count(int k,int p){    int i,tmp;    for(i=0;i<k;i++)        pri[i]=price[i];    for(i=k;i<n;i++)        pri[i+1]=price[i];    pri[k]=p;    int minx=inf,cnt=0;    for(i=0;i<n;i++)    {        if(pri[i]<=minx)        {            minx=pri[i];            tmp=i;        }        if(tmp>k)            break;        if(tmp==k)            cnt+=rat[i];    }    minx=inf;    for(i=n;i>0;i--)    {        if(pri[i]<=minx)        {            minx=pri[i];            tmp=i;        }        if(tmp<k)            break;        if(tmp==k)            cnt+=rat[n-i];    }    return p*cnt;}int main(){    int i,j,cnt;    scanf("%d",&n);    for(i=0;i<n;i++)    {        scanf("%d",&price[i]);        p[2*i]=price[i]-1;p[2*i+1]=price[i];    }    for(i=0;i<n;i++)        scanf("%d",&rat[i]);    sort(p,p+2*n);    cnt=1;    for(i=1;i<2*n;i++)    {        if(p[i]>p[i-1])            p[cnt++]=p[i];    }    int ans=0;    int tmp;    int pos=1;    int recp=p[0];    for(i=1;i<n;i++)        for(j=0;j<cnt;j++)        {          //  printf("p %d\n",p[j]);            tmp=count(i,p[j]);          //  printf("i %d j %d tmp %d\n",i,j,tmp);            if(tmp>ans)            {                ans=tmp;                pos=i;                recp=p[j];            }        }   // printf("ans %d\n",ans);    printf("%d %d\n",pos,recp);}


 

原创粉丝点击