题意:有N个人,你要让他们坐成若干个圆环。
他们每个人需要坐一把椅子,左手边至少要有l个空椅子,右手边至少要有r个空椅子
,问最少需要多少个椅子。
参考:https://blog.csdn.net/zxyoi_dreamer/article/details/82941006
思路 :贪心
左走最大的那个人,他左边不可能有小于限制那么多的凳子,那么我们选择右走最大的那个人,使得他们左右重叠。这样的答案显然是最优的,如果这样贪心,我们总能够找出一个方案,交换两个位置,使它更优
#include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define mp make_pair #define fi first #define se second #define all(v) v.begin(),v.end() const int N = 1e5+4; const int INF =1E9+4; const ll mod =1e9+7; ll powmod(ll x,ll n){ ll res=1;while(n){if(n&1) res = res*x%mod; x=x*x%mod;n/=2;}return res; } ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);} ll l[N],r[N]; int main(){ int n; cin>>n; for(int i=1;i<=n;++i){ scanf("%lld %lld",&l[i],&r[i]); } sort(l+1,l+1+n); sort(r+1,r+1+n); ll ans = n; for(int i=1;i<=n;++i) ans+=max(l[i],r[i]); cout<<ans<<endl; return 0; }