First, sort the order, find the zero cost once, then find the zero cost again, then find the zero cost again, and then find the zero cost again .........
Finally, I found it several times. + 1 is the answer.
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cstdlib>#include<vector>using namespace std;struct node{ int l,w; friend istream & operator >>(istream &is,node &a) { is>>a.l>>a.w; return is; }};bool cmp(node a,node b){ return a.l!=b.l?a.l<b.l:a.w<b.w;}bool operator <=(node a,node b){ return a.l<=b.l&&a.w<=b.w;}int main(){ //freopen("in","r",stdin); node box[5010]; bool vis[5010]; int ans,i,n,j,T; node p; cin>>T; while(T--) { cin>>n; for(i=0;i<n;i++) cin>>box[i]; ans=1; memset(vis,0,sizeof(vis)); sort(box,box+n,cmp); p=box[0]; for(i=0;i<n;i++) { if(vis[i]) continue; if(!(p<=box[i])) ans++; p=box[i]; for(j=i+1;j<n;j++) { if(vis[j]) continue; if(p<=box[j]) { p=box[j]; vis[j]=1; } } } cout<<ans<<endl; } return 0;}
UV live-2322-wooden sticks