1. 程式人生 > >cf 1060d 思維貪心

cf 1060d 思維貪心

out long long math 不可 back lns fir dream style

題意:有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; }

cf 1060d 思維貪心