cf 1060d 思維貪心
阿新 • • 發佈:2018-10-20
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 #definepb 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 思維貪心