BZOJ2697: 特技飞行

【传送门:BZOJ2697


简要题意:

  有k种情况,n个格子,第i个格子选择第j种情况的价值是出现第j种情况的上一次位置到i的距离*C[i],第一次出现价值为0,求出最大价值


题解:

  贪心

  首先加入在1和3和5选择第j种情况的价值,和在1和5选择第j种情况的价值是一样的

  所以我们要让C[i]尽量大的放在1和n

  这样子就先将C数组排序一遍,然后从大到小放在首尾就行了


参考代码:

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
int a[310];
int main()
{
    int n,k;
    scanf("%d%d",&n,&k);
    for(int i=1;i<=k;i++) scanf("%d",&a[i]);
    sort(a+1,a+k+1);
    int l=1,r=n,ans=0;
    for(int i=k;i>=1;i--)
    {
        ans+=(r-l)*a[i];
        l++;r--;if(l>r) break;
    }
    printf("%d\n",ans);
    return 0;
}

 

posted @ 2018-03-19 19:04  Star_Feel  阅读(137)  评论(0编辑  收藏  举报