.
.
.
.
.
.
题解
dp
.
.
.
.
.
.
程序:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,beginlevel,maxlevel;
bool a[70][1010];
int main()
{
freopen("song.in","r",stdin);
freopen("song.out","w",stdout);
scanf("%d%d%d",&n,&beginlevel,&maxlevel);
memset(a,0,sizeof(a));
a[0][beginlevel]=1;
for (int i=1;i<=n-1;i++)
{
int x;
scanf("%d",&x);
for (int j=0;j<=maxlevel;j++)
{
if (!a[i-1][j]) continue;
if (j+x<=maxlevel) a[i][j+x]=1;
if (j-x>=0) a[i][j-x]=1;
}
}
for (int i=maxlevel;i>=0;i--)
if (a[n-1][i])
{
printf("%d",i);
fclose(stdin);
fclose(stdout);
return 0;
}
printf("-1");
fclose(stdin);
fclose(stdout);
return 0;
}