• 板块灌水区
  • 楼主zengweiming
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/10/5 15:53
  • 上次更新2024/10/5 17:14:53
查看原帖
1073849
zengweiming楼主2024/10/5 15:53

我这代码错哪了?

#include<bits/stdc++.h>
using namespace std;
struct bin{
	int x,y;
}a[510];
int d[510][510],f[510][510];
int cmp(bin u,bin v)
{
	if(u.x!=v.x) return u.x<v.x;
	return u.y<v.y;
}
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		cin>>a[i].x>>a[i].y;
	sort(a+1,a+1+n,cmp);
	for(int i=1;i<=n;i++)
	  for(int j=1;j<i;j++)
	    if(a[i].x<a[j].x||a[i].y<a[j].y)
		  d[i][j]=-1;
		else
		  d[i][j]=a[i].x-a[j].x+(a[i].y-a[j].y);
	for(int i=1;i<=n;i++)
	  for(int k=0;k<=m;k++)
	    f[i][k]=k+1;
	for(int i=1;i<=n;i++)
	  for(int j=1;j<i;j++)
	  {
		  if(d[i][j]==-1) continue;
		  for(int k=0;k<=m;k++)
		  {
		  	  if(d[i][j]==1)
		  	  	  f[i][k]=max(f[i][k],f[j][k+1]);
		  	  if(k>=d[i][j]-1)
		  	  	  f[i][k]=max(f[i][k],f[j][k-d[i][j]+1]+d[i][j]);
		  }
	  }
	int ans=0;
	for(int i=1;i<=n;i++)
	  ans=max(ans,f[i][m]);
	cout<<ans<<endl;
	return 0;
}
2024/10/5 15:53
加载中...