首页 > 其他分享 >P8298 [COCI2012-2013#2] POPUST (贪心)

P8298 [COCI2012-2013#2] POPUST (贪心)

时间:2024-07-06 15:21:35浏览次数:20  
标签:std min P8298 道菜 COCI2012 i64 int 2013 define

P8298 [COCI2012-2013#2] POPUST

贪心

考虑当前选 \(k\) 道菜,如果我们先选出了付 \(A\) 元的菜,那么剩下选 \(B\) 元的一定是前 \(k-1\) 大的 \(B_i\)。

这启发我们先将序列按 \(B_i\) 排序。那么可以看到两种情况:

  1. 如果选 \(A\) 元的菜在 \(k\) 道菜之外,那么一定选前 \(k-1\) 道菜付 \(B_i\) 元,\(A\) 就从剩下的里面选最小的。
  2. 如果选 \(A\) 元的菜在前 \(k\) 道菜之内,那么我们选的 \(k\) 道菜一定就是前 \(k\) 道菜,选 \(A\) 元的菜就是 \(A_i-B_i\) 最小的那道(因为 \(val=\sum\limits_{i=1}^kB_i+\min\limits_{1\le i\le k}(A_i-B_i)\)。

从小到大枚举,不断维护即可。

复杂度 \(O(n)\)。

#include <bits/stdc++.h>
#define pii std::pair<int, int>
#define mk std::make_pair
#define fi first
#define se second
#define pb push_back

using i64 = long long;
using ull = unsigned long long;
const i64 iinf = 0x3f3f3f3f, linf = 0x3f3f3f3f3f3f3f3f;
const int N = 5e5 + 10;
int n;
struct node {
	i64 a, b;
	friend bool operator < (node a, node b) {
		return a.b < b.b;
	}
} a[N];
i64 min[N];
int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
	std::cin >> n;

	for(int i = 1; i <= n; i++) {
		std::cin >> a[i].a >> a[i].b;
	}

	std::sort(a + 1, a + n + 1);
	min[n + 1] = iinf;
	for(int i = n; i >= 1; i--) {
		min[i] = std::min(min[i + 1], a[i].a);
	}

	i64 mn = linf, ans = 0;
	for(int i = 1; i <= n; i++) {
		mn = std::min(mn, a[i].a - a[i].b);
		ans += a[i].b;

		std::cout << std::min(ans + mn, (ans - a[i].b) + min[i + 1]) << "\n";
	}
	return 0;
}

标签:std,min,P8298,道菜,COCI2012,i64,int,2013,define
From: https://www.cnblogs.com/FireRaku/p/18287283

相关文章

  • P4097 【模板】李超线段树 / [HEOI2013] Segment
    P4097【模板】李超线段树/[HEOI2013]Segment前言李超线段树并不是一种新的线段树,而是对一类题维护最值的过程做了改进,使线段树仍然有不错的复杂度。引入简要题意实现两种操作:在区间\([x_0,y_0]\)上加入一条两端为\((x_0,y_0)\),\((x_1,y_1)\)的线段。查询下标\(k......
  • P6754 [BalticOI 2013 Day1] Palindrome-Free Numbers
    数据范围一眼数位dp。关键条件为如果一个数字串的一个长度大于 11 的子串也为回文串的话,那么我们也定义这个数字串为回文串。仔细思考发现一旦两个连续的数相同(偶回文)或两个数隔一个数相同(奇回文)都是回文,所以要保证连续三个数不相同,记录前两位即可。注意事项:1.前导零不应为0......
  • 打卡信奥刷题(208)用Scratch图形化工具信奥P8605 [普及组][蓝桥杯 2013 国 AC] 网络寻路
    [蓝桥杯2013国AC]网络寻路题目描述XXX国的一个网络使用若干条线路连接若干个节点。节点间的通信是双向的。某重要数据包,为了安全起见,必须恰好被转发两次到达目的地......
  • 《产流模式的发现与发展》-芮孝芳-2013年1月发表于期刊<水利水电科技进展>
    摘要:回顾了产流理论的起源,指出Horton产流理论、Kohler与Linsley的5变量合轴相关图形式的降雨径流相关图,以及Dunne通过实验对Horton产流理论的拓展,奠定了产流理论和流域产流量计算方法的基础。总结了中国自20世纪50年代以来在这一领域的主要实践和理论探索,指......
  • CEC2013(python):六种算法(ABC、PSO、CSO、OOA、DBO、RFO)求解CEC2013
    一、六种算法简介1、人工蜂群算法(ArtificialBeeColonyAlgorithm,ABC)2、粒子群优化算法PSO3、鸡群优化算法CSO4、鱼鹰优化算法OOA5、蜣螂优化算法DBO6、红狐优化算法RFO二、6种算法求解CEC2013(1)CEC2013简介参考文献:[1]LiangJJ, QuBY, SuganthanPN......
  • [题解]P1967 [NOIP2013 提高组] 货车运输
    P1967[NOIP2013提高组]货车运输题意简述给定一个\(N\)个节点,\(M\)条边的无向图,其中每条边有一个边权。接下来给定\(q\)次询问。每次询问给出\(x,y\),请计算\(x\)到\(y\)路径上最小边权的最大值是多少。解题思路我们对于每个连通块跑一遍最大生成树。这样整张图就成了一片森......
  • CSP历年复赛题-P1982 [NOIP2013 普及组] 小朋友的数字
    原题链接:https://www.luogu.com.cn/problem/P1982题意解读:特征值:第i个同学的特征值是1~i中最大子段和,分数:第i个同学分数是前1~i-1个同学的分数+特征值最大值,求最大分数。解题思路:第一步:先计算特征值f[i],f[i]等于1~i中所有数的最大子段和,所以借助最大子段和的DP方法,每次计算以i......
  • CSP历年复赛题-P1981 [NOIP2013 普及组] 表达式求值
    原题链接:https://www.luogu.com.cn/problem/P1981题意解读:中缀表达式求值,只有+,*,没有括号,保留后4位。解题思路:中缀表达式求值的典型应用,采用两个栈:符号栈、数字栈,对于没有括号的情况,只需要如下步骤:1、遍历表达式每一个字符2、如果遇到数字,则持续提取数字,保存整数到数字栈3、......
  • CSP历年复赛题-P1980 [NOIP2013 普及组] 计数问题
    原题链接:https://www.luogu.com.cn/record/160821231题意解读:统计1~n中x的个数。解题思路:枚举每个数,提取每一位,判断是否等于x。100分代码:#include<bits/stdc++.h>usingnamespacestd;intn,x,ans;intmain(){cin>>n>>x;for(inti=1;i<=n;i++)......
  • N5_2013_07_Q3
    问题31ばん今から寝ます。家族に何と言いますか。现在要睡觉了。对家人说什么?1.おやすみなさい晚安2.こんばんは晚上好3.さようなら再见ねる(寝る)动睡觉かぞく(家族)名家人なんと言いますか疑怎么说2ばん時計がありません。時間が知りたいです。何と......