记忆优化思路求助
  • 板块P1164 小A点菜
  • 楼主Gril
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/4/2 04:28
  • 上次更新2023/10/28 04:53:26
查看原帖
记忆优化思路求助
622751
Gril楼主2022/4/2 04:28

我想的是将dfs函数看作最大结局方案数,可这样为什么不对呢,样例都没过

#include<bits/stdc++.h>
using namespace std;
int dp[10003];
int M,N,a[103];
int ans = 0;
int dfs(int k,int rest)
{
    if(rest == 0)return 1;
    else if(rest < 0||k > N)return 0;
    if(dp[rest]==-1)dp[rest] = max(dfs(k+1,rest-a[k]),dfs(k+1,rest));//记录最大方案数,rest-a[k]是选择这个菜,不-a[k]则是不选择这个菜
    else
    return dp[rest];
}
int main()
{
    cin >> N >> M;
    for(int i = 1;i <= N;i++)
        cin >> a[i];
    for(int i = 1;i <= M;i++)
        dp[i] = -1;
    cout << dfs(1,M);
    return 0;
}

2022/4/2 04:28
加载中...