关于第一个题解有个巨大的疑问(蒟蒻的幻想
  • 板块P1233 木棍加工
  • 楼主ho33
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/3/10 20:45
  • 上次更新2023/10/23 22:00:27
查看原帖
关于第一个题解有个巨大的疑问(蒟蒻的幻想
874984
ho33楼主2023/3/10 20:45

为什么第一个我尝试用第一个题解的思路去做,将dp[1]初始化成1(我将木棍从数组下标1开始存的),因为无论如何从哪一个方面来说前1个最大上升子序列的长度一定是1.但是这样只能过四个点。而题解大佬将f[0]置为0最后输出加1就好,这是为什么。


#include<bits/stdc++.h>
using namespace std;
struct Edge{
  int l,w;
};
Edge e[5001];
bool cmp(Edge x,Edge y){
  if(x.l!=y.l){
    return x.l>y.l;
  }
  return x.w>y.w;
}
int f[5001];
int dp[5001];
int main(){
  int n,ans = 0;
  cin>>n;
  //dp[0] = 1;
  dp[1] = 1;
  for(int i = 1;i <= n;i++){
    cin>>e[i].l>>e[i].w;
  }
  sort(e+1,e+n+1,cmp);
/*  for(int i = 1;i <= n;i++){
    cout<<e[i].l<<" "<<e[i].w<<endl;
  }*/
  for(int i = 1;i<=n;i++){
    for(int j = 1;j< i;j++){
      if(e[i].w>e[j].w){
        dp[i] = max(dp[i],dp[j]+1);
      }
    }
    if(dp[i]>ans){
      ans = dp[i];
    }
  }
  cout<<ans;
}
2023/3/10 20:45
加载中...