[ABC376E] Max × Sum 题解
1.[ABC347C] Ideal Holidays题解2.《扶苏的问题》题解3.[ABC366C] Balls and Bag Query 题解4.[ABC366D] Cuboid Sum Query 题解5.P7706 文文的摄影布置 题解6.[ABC370C] Word Ladder 题解7.P11020 「LAOI-6」Radiation 题解8.P11019 「LAOI-6」[太阳]] 请使用最新版手机 QQ 体验新功能 题解9.[ABC371D] 1D Country 题解10.[ABC371D] 1D Country 线段树解法11.P1955 程序自动分析 题解
12.[ABC376E] Max × Sum 题解
13.[ABC379D] Home Garden 题解14.P11276 第一首歌 题解15.[ABC380C] Move Segment 题解[ABC376E] Max × Sum 题解
一道简单的推性质题,首先明确一个性质,子集是非连续的,所以在计算时并不用连续区间求。
拿过题来,首先想的是枚举
由于题目未要求输出子集元素,则元素顺序对求解过程无影响,于是建立结构体数组
注:
- 记得开
long long
ans
的初值不能太小,至少
#include <bits/stdc++.h>
#define seq(q, w, e) for (int q = w; q <= e; q++)
#define ll long long //记得开long long
using namespace std;
const ll maxn = 2e5+10,mod=2e17; //初值至少2e17
ll t,ans;
ll n,k,tot; //tot为b的和
struct node{
ll a,b;
}s[maxn];
bool cmp(node a,node b){ //排序函数
return a.a<b.a;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>t;
while(t--){
tot=0,ans=mod;
priority_queue<ll,vector<ll>,less<ll> >pq; //优先队列存储b的值
cin>>n>>k;
seq(i,1,n) cin>>s[i].a;
seq(i,1,n) cin>>s[i].b;
sort(s+1,s+n+1,cmp);
seq(i,1,n){
if(pq.size()<k-1){ //若堆的大小不足k-1
tot+=s[i].b;
pq.push(s[i].b);
}
else{
tot+=s[i].b; //压入,正好k个元素
pq.push(s[i].b);
ans=min(ans,s[i].a*tot); //与原先ans取min
tot-=pq.top(); //不确定是否最优,于是继续统计
pq.pop();
}
}
cout<<ans<<"\n";
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】