80分求助
查看原帖
80分求助
998083
Cjz2024楼主2023/10/21 23:16

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;
}

用的记忆化爆搜,求改进

2023/10/21 23:16
加载中...