#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
int i,j,p,n,k,f[505][105]; // f[i][j]: 前 i 个点,插入了 j 个点后最大长度
pair<int,int>a[505];
int main()
{
cin>>n>>k;
for(i=1;i<=n;i++)cin>>a[i].x>>a[i].y;
sort(a+1,a+n+1);
for(i=1;i<=n;i++)
{
for(j=0;j<=k;j++)f[i][j]=1+j; // 直接在 i 点前插入 j 个点
}
// 类似最长上升子序列
for(i=2;i<=n;i++)
{
for(j=i-1;j>=1;j--) // j -> i
{
if(a[j].y>a[i].y)continue;
// 从 j 到 i 要插入 d 个点才能满足
int d=a[i].x-a[j].x+a[i].y-a[j].y-1;
for(p=d;p<=k;p++)f[i][p]=max(f[i][p],f[j][p-d]+d+1);
}
}
int ans=0;
for(i=1;i<=n;i++)ans=max(ans,f[i][k]);
cout<<ans;
return 0;
}
for(p=d;p<=k;p++)f[i][p]=max(f[i][p],f[j][p-d]+d+1);
请问这一行是什么意思啊,希望解释的详细一点,谢谢qwq