wa两个点,似乎不是因为输出-1。 代码如下:
#include<bits/stdc++.h>
using namespace std;
const int MAXN=100;
int beginlevel,maxlevel,n,c[MAXN],cache[MAXN][MAXN];
bool mem[MAXN][MAXN];
int dp(int i,int j){
if(i==n+1) return cache[i][j]=j;
if(j+c[i]>maxlevel && j-c[i]<0)return -1;
if(mem[i][j]) return cache[i][j];
mem[i][j]=true;
if(j+c[i]>maxlevel) return cache[i][j]=dp(i+1,j-c[i]);
if(j-c[i]<0) return cache[i][j]=dp(i+1,j+c[i]);
int case1=dp(i+1,j+c[i]);
int case2=dp(i+1,j-c[i]);
return cache[i][j]=max(case1,case2);
}
int main(){
scanf("%d%d%d",&n,&beginlevel,&maxlevel);
for(int i=1;i<=n;++i){
scanf("%d",&c[i]);
}
printf("%d",dp(1,beginlevel));
return 0;
}
用的记忆化爆搜,求改进