洛谷:P1233 木棍加工(dp,特殊排序用结构体,最长上升)

题目:

分析:就是找最少的组数,但不知道从何下手。

我特么就是菜鸡,这不就是导弹问题吗?

在这里插入图片描述

我所期望的:

在这里插入图片描述

代码:

#include<bits/stdc++.h>
using namespace std;
struct MG{
    int l, w;
} m[5050];
int D2[5050]; 
bool cmp(MG x, MG y){
 if (x.l != y.l) return x.l > y.l;
    else return x.w > y.w;
}
int main()
{
 int n;
 cin>>n;
 for(int i=0;i<n;i++)
 {
  cin>>m[i].l>>m[i].w;
 }
 sort(m, m + n, cmp);
 //求w的最长不下降
 int len2 = 0;
  D2[0]=m[0].w;
 for (int i=1; i<n; i++) {  //从a[2]开始枚举每个数(a[1]已经加进去了)
  if (D2[len2] < m[i].w) D2[++len2] = m[i].w;  //同上
  else {
   int p2 = lower_bound(D2, D2 + len2,m[i].w) - D2;
   D2[p2] = m[i].w;
  }
 }
 cout<<len2+1; 
}

猜你喜欢

转载自blog.csdn.net/weixin_42721412/article/details/107892450
今日推荐