求助:AC / WA 36 之间的区别?
查看原帖
求助:AC / WA 36 之间的区别?
365654
封禁用户楼主2022/7/1 14:26

RT:

#include<bits/stdc++.h>
using namespace std;
struct Dts
{
	int x;
	int v;
}dts[1012];
int sv1[1012][1012],sv2[1012][1012];
bool cmp2(Dts a,Dts b)
{
	return a.x>b.x;
}
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	    cin>>dts[i].x>>dts[i].v;
	sort(dts+1,dts+n+1);
	for(int i=0;i<=n;i++)
		sv1[i][0]=dts[i].v;
	sv1[1][1]=dts[1].v;
	dts[0]={dts[1].x,0};
	for(int i=2;i<=n;i++)
	{
		int p=i;
		for(int j=1;j<=i;j++)
		{
			while(dts[i-j].x-dts[max(p-1,0)].x<=dts[i].x-dts[i-j].x&&p>=1) p--;
			sv1[i][j]=max(max(sv1[i][j-1],sv1[i][j]),sv1[i-j][i-j-p]+dts[i].v);
		}
	}
	sort(dts+1,dts+n+1,cmp);
	for(int i=0;i<=n;i++)
		sv2[i][0]=dts[i].v;
	sv2[1][1]=dts[1].v;
	dts[0]={dts[1].x,0};
	for(int i=2;i<=n;i++)
	{
		int p=i;
		for(int j=1;j<=i;j++)
		{
			while(dts[i-j].x-dts[max(p-1,0)].x>=dts[i].x-dts[i-j].x&&p>=1) p--;
			sv2[i][j]=max(max(sv2[i][j],sv2[i][j-1]),sv2[i-j][i-j-p]+dts[i].v);
		}
	}
  /*
  (X)
	int ans=0;
	for(int i=0;i<=n;i++)
	    ans=max(max(sv1[i][i],sv2[i][i]),ans);
	cout<<ans;
  */
  
  /*
  (Y)
  cout<<max(sv1[n][n],sv2[n][n]);
  */
	return 0;
}

X 段可以 AC,而 Y 段 WA 36。

拍出的一组数据:

Input:
4
1 1
2 3
4 6
5 10
Output:
(X) 19 / Choice: 4 - 3 - 2
(Y) 17 / Choice: 4 - 3 - 1

所以,Y 段到底哪里出了问题?

2022/7/1 14:26
加载中...