60分警钟长鸣
查看原帖
60分警钟长鸣
1037870
jianxing04楼主2024/1/20 18:33

先看看我的60分代码

#include<bits/stdc++.h>
using namespace std;
int n,b,m,a[59];
bool ans[59][1009];
int main()
{
	cin>>n>>b>>m;
	for (int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	ans[0][b]=1;
	for (int i=1;i<=n;i++)
	{
		for (int j=-1;j<=1;j+=2)
		{
			for (int k=0;k<=1000;k++)
			{
				if (k+j*a[i]>=0&&k+j*a[i]<=m)
				{
					ans[i][k+j*a[i]]=ans[i-1][k];//错处
				}
			}
		}
	}
	while (m>=0&&!ans[n][m])
	{
		m--;
	}
	cout<<m;
	return 0;
}

这样写,未考虑到一个音量值可以是上一场可达到的音量减来的或是加来的,所以对于同一个音量值,这种写法会使可以靠上一场可达到的音量减来得到的音量,因无法由上一场可达到的音量加到这个数值而被重置为0

2024/1/20 18:33
加载中...