P3918 [国家集训队] 特技飞行 - 洛谷
思路:
因为如果连续进行相同的动作,乘客会感到厌倦,所以定义某次动作的价值为(距上次该动作的时间) ×ci,若为第一次进行该动作,价值为 0。同一个动作,价值为ci*(最后一次出现的时间-首次出现的时间)。自己模拟试试。所以我们要使最大的ci匹配到最大的时间差。注意:每个动作占用两个端点
代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[1005];
int main()
{int n, k;int ans = 0;cin >> n >> k;for(int i = 1; i <= k; i++) cin >> a[i];sort(a + 1, a + k + 1, greater<int>()); n--; // 最大时间差初始为n-1int i = 1; while(n > 0 && i <= k) {ans += n * a[i]; i++;n -= 2; //每个动作占用两个端点,剩余时间差减2}cout << ans << endl;return 0;
}