题解:P14174 【MX-X23-T4】卡常数
题意简述
-
定义数列
a_i 的代价P_i 为其中所有元素的乘积再乘以x_i ,即P_i = x_i \prod_{j=1}^{l_i} a_{i, j} \text{。} -
定义全体数列的总代价
P 为每个数列的代价之和,即P = \sum_{i = 1}^{n} P_i \text{。}
对于所有
思路分析
考虑贪心,
AC CODE
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
long long a[500005],b[500005];
priority_queue<long long> Q;
pair<long double,int> ans[500005];
long long result;
int main()
{
int n,k;
cin>>n>>k;
while(n--)
{
long long x,l;
cin>>x>>l;
long long currmul=x;
for(int i=1;i<=l;i++)
{
cin>>a[i];
currmul*=a[i];
}
result+=currmul;
for(int i=1;i<=l;i++)
{
cin>>b[i];
}
for(int i=1;i<=l;i++)
{
ans[i].first=1.l*(a[i]-b[i])/a[i];
ans[i].second=i;
}
sort(ans+1,ans+l+1);
for(int i=1;i<=l;i++)
{
long long now=currmul;
now=currmul/a[ans[i].second]*b[ans[i].second];
//cout<<currmul-now<<" ";
Q.push(now);
currmul-=now;
//cout<<currmul<<endl;;
}
}
for(int i=1;i<=k;i++)
{
//cout<<result<<" ";
result-=Q.top();
Q.pop();
}
cout<<result;
return 0;
}