洛谷P1233 木棍加工
阿新 • • 發佈:2018-10-20
col 發現 p12 ios 經典 如果 out class long long
這是一個經典的貪心+DP。
首先我們讀題,可以發現一個顯然的貪心結論:如果我們把最長最寬的棍子放在前面,時間用的豈不是最少?
解法就是上述的問題。直接排序(排序在長度相同的時候就用寬度),然後比較寬度,存一個最小的寬度。考慮設置一個vis數組,如果之後的棍子沒被vis過而且寬度更小,我們就更新寬度順便打上標記。做完這些之後,遍歷數組,如果vis沒被打上標記,說明這玩意沒被前面更大的更新過,ans++即可。
Code:
#include<iostream> #include<cstdio> #include<algorithm> #define ll long long #definemaxn 100001 using namespace std; struct Gunzi{ int l,w; }g[maxn]; int n,vis[maxn],li,wi,ans; inline bool cmp(Gunzi a,Gunzi b){ if(a.l==b.l) return a.w>b.w; return a.l>b.l; } int main(){ cin>>n; for(int i=1;i<=n;i++){ int x,y; cin>>x>>y; g[i].l=x; g[i].w=y; } sort(g+1,g+1+n,cmp); for(int i=1;i<=n;i++){ if(!vis[i]){ wi=g[i].w; for(int j=i+1;j<=n;j++){ if(g[j].w<=wi&&!vis[j]){ vis[j]=1; wi=g[j].w; } } } }for(int i=1;i<=n;i++){ if(!vis[i]) ans++; } cout<<ans; return 0; }
洛谷P1233 木棍加工