求代码示意
查看原帖
求代码示意
481337
Pratty楼主2023/9/19 21:06
#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

2023/9/19 21:06
加载中...