

做了下上学期期中考试题,乍一看以为是贪心,wa了贼多发后发现是dp。
注意:一个乘客下车后如果该站点没有人上车,则结束,说明最多的人数都要首尾相连!
感谢小王同学指点迷津。
#include<bits/stdc++.h>
using namespace std;
//======================
const int N=1e3+10;
int dp[N];//dp[i]表示以i结尾的最多的人数
int n,m;
int ans=-0x3f3f3f3f;
int main()
{
scanf("%d%d",&m,&n);
while(n--)
{
int a,b;cin>>a>>b;
if(a==b||b>m) continue;
dp[b]=max(dp[b],dp[a]+1);
ans=max(ans,dp[b]);
}
cout<<ans;
return 0;
}
本文通过动态规划解决了关于乘车人数的最大化问题。初始时误以为是贪心算法,经过多次尝试后发现正确的方法。注意到当某站无人上下车时,序列结束。文中提供了一个具体的C++实现案例。

6061

被折叠的 条评论
为什么被折叠?



