先看看我的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