题意:给你n个棒子,每个棒子有两个属性(l,w),现在要加工棒子,求加工的最短时间
思路:求不同的最长不降子序列的总个数
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef struct { int l,w; }WOOD; WOOD stick[5050]; int n; bool vis[5050]; int cmp(const WOOD &a , const WOOD &b) { return a.l < b.l; } int main() { int cas; scanf("%d",&cas); while(cas--) { scanf("%d",&n); for(int i = 1 ; i <= n ; i++) vis[i] = false; for(int i = 1 ; i <= n ; i++) scanf("%d%d",&stick[i].l,&stick[i].w); int res = 0; sort(stick+1,stick+n,cmp); for(int i = 1 ; i <= n ; i++) { if(vis[i]) continue; else { res++; vis[i] = true; int pre_index = i; for(int j = i+1 ; j <= n ; j++) { if(vis[j]) continue; else { if(stick[j].w >= stick[pre_index].w) { pre_index = j; vis[j] = true; } } } } } printf("%d\n",res); } return 0; }