记忆搜索wa两个,无能为力求助(有注释)辛苦各位大佬
  • 板块P1164 小A点菜
  • 楼主codeG0d
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/3/25 21:39
  • 上次更新2023/10/28 05:41:03
查看原帖
记忆搜索wa两个,无能为力求助(有注释)辛苦各位大佬
661318
codeG0d楼主2022/3/25 21:39

wa掉了8和10,看了下第八题,正确答案几千,我的输出九位数,我尝试开longlong答案更离谱,输出的十多位的负数。。我是看不出来哪里有毛病,求求各位大佬帮助,感谢!

#include<bits/stdc++.h>
using namespace std;
int n,m;
vector<int> num;//存菜价格
int cache[101][10001];//存搜索结果
bool vis[100][10001];//记录是否搜过
int dfs(int now,int money)
{
    if(now == n && money > 0)//菜都看过一遍还剩钱就证明之前的点法花不完
        return 0;
    if(vis[now][money])//备忘录
        return cache[now][money];
    int sum = 0;//sum是记录所有点法的结果
    for(int i = now;i < n;i++)
        sum += dfs(i + 1,money - num[i]);//正常深搜
    cache[now][money] = sum,vis[now][money] = 1;//搜完了记到备忘录上面
    return sum;
}
int main()
{
    cin >> n >> m;
    num.resize(n);
    for(int i = 0;i < n;i++)//
        cin >> num[i];
    for(int i = 0;i <= n;i++)//如果剩下0钱就只有一种啥都不点的点法了
        vis[i][0] = cache[i][0] = 1;
    cout << dfs(0,m);
}
2022/3/25 21:39
加载中...