侧边栏壁纸
  • 累计撰写 192 篇文章
  • 累计创建 2 个标签
  • 累计收到 87 条评论

【题解】机会成本

Allen Best
2022-10-14 / 0 评论 / 1 点赞 / 16 阅读 / 900 字
温馨提示:
本文最后更新于 2023-04-25,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

题目描述
每个人的一生只能认真对待一件事。
给定一个整数 n,表示人生中遇到的 n 件事。若认真对待某件事,可以获得的分数分别为 a1,a2,…,an,若是只是被动应付,则获得的分数分别为 b1,b2,…,bn。

请选择应该认真对待哪一件事,才能让分数的总和达到最大。

输入格式
第一行:单个整数表示 n
第二行到第 n+1 行:每行两个整数表示 ai与bi
​输出格式
单个整数:表示最大的分数之和

数据范围
对于 30% 的数据,1≤n≤5,000;
对于 60% 的数据,1≤n≤20,000;
对于 100% 的数据,1≤n≤500,000;
0≤bi≤ai≤4000;
样例数据
输入:
3
1 1
2 0
3 2
输出:
5
【题解】
做好第i件事比没做好这件事可以多赚多少分的最大值,然后加上做不好每一件事的得分。

#include<bits/stdc++.h>
#include <iostream>     // cin  cout的头文件  基本输入流
#include <iomanip>   //cout输出时,保留小数fixed、setprecision的头文件 参数化输入/输出
#include <cstdio>    //scanf、printf的头文件  定义输入/输出函数
#include <cmath>     //sqrt()求平方根、定义数学函数
#include <algorithm>    //STL通用算法
#include <cstring>
#include <string>
using namespace std;
const int N=5e5+5;
int a[N],b[N];
 
int main(){
	int n,mx=-9999;
	long long ans=0;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i]>>b[i];
		ans+=b[i];
	}
	for(int i=1;i<=n;i++){
		mx=max(mx,a[i]-b[i]);
	}
	ans+=mx;
	cout<<ans<<endl;
	return 0;
}
0

评论区