贪心。
直接想很难。
我们可以假设序列已经最优。
即-->交换任意相邻两项,都不会使结果变优。(类似冒泡,等价交换任意两项)
交换相邻两个大臣,对其他大臣得到的金币没有没有影响。
只看这两个大臣得到的金币。
列个公式算一算就行了。
发现必须满足ai*bi<a(i+1)*b(i+1)才能使结果最优。
注意加上大数
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//typedef __int128 LL;
//typedef unsigned long long ull;
typedef double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<ld,ld> pdd;/*
const ld PI=acos(-1);
const ld eps=1e-9;*/
//unordered_map<int,int>mp;
#define F first
#define S second
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const int seed=131;
const int M = 1e4+7;
const int N = 1010;
int n;
vector<int> mul(vector<int>a, int b)
{
vector<int> c;
int t = 0;
for (int i = 0; i < a.size(); i ++ )