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;
}