P2356 弹珠游戏题解

P2356 弹珠游戏题解

先说都会的TIE两个点的题解…

#include
using namespace std;
int n;
int a[10001][10001];
int ans=-1;
int MYB(int x,int y)
{
	int sum=0;
	for(int i=1;i<=n;i++)
		sum+=a[x][i];
	for(int i=1;i<=n;i++)
		sum+=a[i][y];
	return sum;
} 
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			cin>>a[i][j];
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(ans<MYB(i,j) && a[i][j]==0)
				ans=MYB(i,j);
	if(ans>0)
		cout<<ans;
	else cout<<0;
	return 0;
}

注意了:

在哪里优化呢???

答案是,在循环里

如果a[i][j]!=0

则continue(跳过)

这样,就可以节省时间了

不用再跑 O(2n) 的复杂度的MYB了

最后,献上你们最爱的代码!!!

#include
using namespace std;
int n;
int a[10001][10001];
int ans=-1;
int MYB(int x,int y)
{
	int sum=0;
	for(int i=1;i<=n;i++)
		sum+=a[x][i];
	for(int i=1;i<=n;i++)
		sum+=a[i][y];
	return sum;
} 
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			cin>>a[i][j];
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(a[i][j]!=0)
				continue;
			else if(ans<MYB(i,j))
				ans=MYB(i,j);
	if(ans>0)
		cout<<ans;
	else cout<<0;
	return 0;
}

完结

你可能感兴趣的:(c++,算法)