这道题让我更深入的理解了记忆化搜索的过程,既然记忆化搜索的结果要靠返回值来传递,那么记忆化搜索解决问题的必须是倒序的,即记忆化搜索是一个简化问题倒序解决的过程,普通搜索是一个复杂化问题逐步尝试并记录尝试结果的过程。

特别是对于求总种数的记忆化搜索,就是把能干的事情组合起来然后把情况全都加到DFS变量中,然后直接return DP[*][*]=DFS即可。同时异常剪枝可以直接在递归搜索中进行。只进行常规的记忆化剪枝就可以。当然异常剪枝和搜索时判断边界同时来做,双重保险也是可以的。

Code

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <map>
#include <vector>
#include <queue>
#include <cstring>
#include <cmath>
using namespace std;
int N,M,DP[1005][1005],a[1005]; int dfs(int money,int considered_meal)//money is the rest money ;return_value is the count of how much way i can buy
{
//记忆化剪枝
if(DP[money][considered_meal]!=-1)return DP[money][considered_meal];
//cout<<money<<' '<<considered_meal<<endl; //递归搜索,核心思想是求总种数就"能干啥干啥,不能就拉倒不用管"
int DFS=0;
//能干的事情的组合如下
//继承且买
if(money-a[considered_meal]>0&&considered_meal-1>0)DFS+=dfs(money-a[considered_meal],considered_meal-1);
//买但不继承
if(money-a[considered_meal]==0)DFS+=1;
//继承但不买
if(considered_meal-1>0)DFS+=dfs(money,considered_meal-1); return DP[money][considered_meal]=DFS;
} int main()
{
cin>>N>>M;
memset(DP,-1,sizeof(DP));DP[0][0]=0;
for(int i=1;i<=N;i++)
{
cin>>a[i];
}
cout<<dfs(M,N)<<endl;
return 0;
}

P1164-DP【橙】的更多相关文章

  1. 洛谷 p1164 小A点菜 【dp(好题)】 || 【DFS】 【恰好完全装满】

    题目链接:https://www.luogu.org/problemnew/show/P1164 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. u ...

  2. 洛谷P1164 小A点菜 DP入门

    原题传输门>>https://www.luogu.org/problem/show?pid=1164<< 前几天开始联系DP的,一路水题做到这,发现这题套不了模板了QAQ 在大 ...

  3. 洛谷 P1164:小A点菜(DP/DFS)

    题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:"随便点". 题目描述 不过ui ...

  4. P1164 小A点菜【dp】

    P1164 小A点菜 提交 43.03k 通过 24.37k 时间限制 1.00s 内存限制 125.00MB 题目提供者洛谷 难度普及- 历史分数100 提交记录 查看题解 标签 洛谷原创   查看 ...

  5. 清橙A1212:剪枝

    题面 清橙 Sol 一种新的树上\(DP\)姿势 从左往右按链\(DP\) 做法: 维护两个栈\(S1\),\(S2\) \(S1\)存当前的链 \(S2\)存分叉点以下要改的链 \(Dfs\),弄一 ...

  6. DP题目推荐合集(洛谷/UVa)

    今天下午要参加海淀区的比赛了...这几天临时抱佛脚刷了几道DP,正所谓临阵磨枪,不快也光...下面我 就把最近刷到的,自己觉得不错的动态规划题列出来: 1.P2690 接苹果 :(基础二维DP) 2. ...

  7. DP及其优化

    常见DP模型及其构造 序列DP ARC074 RGB Sequence 题意 给你一个长度为 \(n\) 的序列和 \(m\) 组约束条件,每组条件形如 \(l_i,r_i,x_i\),表示序列上的 ...

  8. DP 要求将承载量花光的01背包问题

    前言:很久没有发博客了,以后会捡起来,之后很长一段时间内我都会把精力放在攻克DP问题上,所以会经常上传一些DP学习笔记,把一些比较好的,没见过类型的DP问题都会传上来,希望能够变强吧. 因为今天很清醒 ...

  9. 动态规划dp专题练习

    貌似开坑还挺好玩的...开一个来玩玩=v=... 正好自己dp不是很熟悉,就开个坑来练练吧...先练个50题?小目标... 好像有点多啊QAQ 既然是开坑,之前写的都不要了! 50/50 1.洛谷P3 ...

  10. 复习1背包dp

    背包问题是对于一个有限制的容器,一般计算可以装的物品的价值最值或数量.通常每个物品都有两个属性空间和价值,有时还有数量或别的限制条件,这个因体而异. 背包大概分成3部分,下面会细述这最经典的3种题型 ...

随机推荐

  1. [ARC161F] Everywhere is Sparser than Whole (Judge)

    Problem Statement We define the density of a non-empty simple undirected graph as $\displaystyle\fra ...

  2. [CF1748E] Yet Another Array Counting Problem

    题目描述 The position of the leftmost maximum on the segment $ [l; r] $ of array $ x = [x_1, x_2, \ldots ...

  3. Nginx的安装与运行

    前言:本文是基于虚拟机上的centOS 7对Nginx的安装,可以使用uname -a查看centOS系统版本,本文用来记录安装nginx的步骤和相关命令,方便日后使用时查看. 去官网https:// ...

  4. 华企盾DSC控制台+系统运维模块连接不上问题

    解决方法:把rundll32.exe进程结束之后再点系统运维模块

  5. 数字孪生系统融合GIS系统能够在洪涝灾害防治上带来什么帮助?

    数字孪生技术与GIS系统的融合,为防治洪涝灾害方式带来了巨大的改变.这种整合的力量超越了过去单一技术的局限,为防洪抗灾工作提供了更全面.更准确的决策支持和应急响应能力. 在过去,防洪抗灾工作主要依赖于 ...

  6. postman——下载与安装

    一.postman是什么? 那么,Postman是个什么东东呢?Postman的官网上这么介绍它:"Modern software is built on APIs,Postman help ...

  7. linux内核initcall放置在各个section中函数执行流程

    前言 linux以及嵌入式一些代码,我们看到core_initcall.device_initcall等等需要链接器分配各个section,并且在启动该模块时候执行.下面我们详细追溯一下执行过程. 作 ...

  8. 8种超简单的Golang生成随机字符串方式

    本文分享自华为云社区<Golang生成随机字符串的八种方式与性能测试>,作者: 张俭. 前言 这是**icza**在StackOverflow上的一篇高赞回答,质量很高,翻译一下,大家一起 ...

  9. vue3 + element-plus 的 upload + axios + django 文件上传并保存

    之前在网上搜了好多教程,一直没有找到合适自己的,要么只有前端部分没有后端,要么就是写的不是很明白.所以还得靠自己摸索出来后,来此记录一下整个过程. 其实就是不要用默认的 action,要手动实现上传方 ...

  10. vue3 + vite + ts 配置 @ 别名

    第一步 npm install @types/node -D 第二步 这是原 vite.config.ts文件 import { defineConfig } from 'vite' import v ...