Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
52467 wsad 木板游戏 C++ 解答错误 0 2000 MS 4784 KB 884 2022-07-19 12:15:55

Tests(0/20):


#include <bits/stdc++.h> using namespace std; const int N=5e5+3; int dp[2][N]; //dp[i][j]->前i个(滚动)以j结尾的木板数,dp[i][0]->最大木板数 struct stu { int l,r; } w[N]; int Read() { int sum=0; char ch=getchar(); while(ch<'0' || ch>'9') ch=getchar(); while(ch>='0' && ch<='9') sum=sum*10+ch-'0',ch=getchar(); return sum; } bool cmp(stu a,stu b) { return a.l==b.l ? a.r>b.r : a.l<b.l; } int main() { int n; n=Read(); for(int i=1; i<=n; ++i) w[i].l=Read(),w[i].r=Read(); sort(w+1,w+1+n,cmp); for(int i=1,k=1; i<=n; ++i,k=!k) //k -> i,!k -> i-1 { dp[k][0]=dp[!k][0]; for(int j=1; j<=i; ++j) { if(w[i].l>=w[j].l && w[i].r<=w[j].r) dp[k][j]=max(dp[k][j],dp[!k][j]+1); dp[k][0]=max(dp[k][0],dp[k][j]); } } cout<<dp[n&1][0]<<'\n'; return 0; }


测评信息: