一、题目描述

https://www.luogu.com.cn/problem/P1164
背包问题

二、思想

这道题不难,本来用滚动数组做是不想发题解了,但是又想试试用二维数组就发现了好多问题。(所以说一道题要尝试不同方法多做几遍)
状态定义 很简单 dp[i][j]:前i个菜,共有j元钱的方案数。
dp[i][j]=dp[i-1][j]+dp[i-1][j-a[i]]
当j==a[i] 时,dp[i][j]=dp[i-1][j]+1
j<a[i] 钱不够买不起第i道菜 dp[i][j]=dp[i-1][j]
前i个菜,共花j元钱的方案数 就等于j元钱只买 前i个菜 加上 买第i个菜 剩下的j-a[i] 元钱买 前i-1个菜。
首先这题不能拿常规的背包问题去求解,不然会死的很惨 。
常规背包问题一般喜欢初始化 第一行 将第一个菜 在两种情况下枚举(钱够就1,不够为0)。
但是这道题目种明确说了 钱要全部花完! 这就意味者在只考虑一个菜的情况下,只有拥有钱=菜的价格 时 才算为一种方案。
所以 初始为 当拥有的钱 i 等于 第一道菜的价格 dp[1][i]=1


再来一手滚动数组。
注意:从后往前推
只要注意初始化 dp[0]=1: 当菜的价格和拥有钱相等时 就是一种方案。

三、代码

#include <iostream>
#include <cstdio>
using namespace std;
int dp[105][10005]={0};
int main(){int n,m,a[105];scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%d",&a[i]);for(int i=0;i<=m;i++) if(i==a[1]) {dp[1][i]=1;break;}for(int i=2;i<=n;i++){for(int j=0;j<=m;j++){if(j<a[i])dp[i][j]=dp[i-1][j];else if(j==a[i]) dp[i][j]=dp[i-1][j]+1;else dp[i][j]=dp[i-1][j]+dp[i-1][j-a[i]];}}printf("%d",dp[n][m]);return 0;
}

滚动数组

#include <iostream>
#include <cstdio>
using namespace std;
int dp[10005]={0};
int main(){int n,m,a[105];scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%d",&a[i]);dp[0]=1;for(int i=1;i<=n;i++){for(int j=m;j>=0&&j>=a[i];j--){dp[j]+=dp[j-a[i]];}}printf("%d",dp[m]);return 0;
}

洛谷P1164小A点菜相关推荐

  1. 【01背包求方案数模板】洛谷 P1164 小A点菜

    洛谷 P1164 小A点菜 https://www.luogu.org/problemnew/show/P1164 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆, ...

  2. 洛谷——P1164 小A点菜

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

  3. (Java实现)洛谷 P1164 小A点菜

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

  4. 洛谷P1164 小A点菜

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

  5. 洛谷 P1164 小A点菜(01背包状态转移方程详细推导)

    题目链接 今天刷题,本来背包问题感觉稳稳的懒得刷了,随手做两个就被卡住了, 原来自己只会做死板的背包,这种稍微变形的就不会推状态转移方程了 我又去看了一眼滚动背包的转变方法 加上大佬的题解,才稍微明白 ...

  6. 动态规划——小A点菜(洛谷 P1164)

    题目选自洛谷P1164 这是一道简单的动规题,定义f[i][j]为用前i道菜用光j元钱的办法总数,其状态转移方程如下: (1)if(j==第i道菜的价格)f[i][j]=f[i-1][j]+1; (2 ...

  7. P1164 小A点菜 洛谷

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

  8. 洛谷 P4430 小猴打架

    洛谷 P4430 小猴打架 题目描述 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友.每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友.经过N-1次打 ...

  9. 2017提高组D1T1 洛谷P3951 小凯的疑惑

    洛谷P3951 小凯的疑惑 原题 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想 ...

最新文章

  1. [物理学与PDEs]第4章习题3 一维理想反应流体力学方程组的数学结构
  2. apache php隐藏头信息的方法,科技常识:nginx/apache/php隐藏http头部版本信息的实现方法...
  3. Spring中注解大全和应用
  4. 【Android-NCNN-Vulkan】记录一次ncnn-vulkan在低性能开发板上出现的native内存溢出的问题
  5. 基于webpack的PC端和mobile端开发以及生产环境的搭建
  6. poj3276 反转 挑战程序设计竞赛
  7. linux内核I2C体系结构(注意结构体原型)
  8. ASP.NET的安全性
  9. 手机wap网页制作的认识(有关meta…
  10. FreeSwitch Originate API
  11. Python可视化:python画图字体设置
  12. ​LeetCode刷题实战518:零钱兑换 II
  13. 【不仅仅是程序员】——公司的沉淀是什么(2)
  14. 微信开发者工具小技巧——快速创建小程序的新页面。
  15. 洛谷 P4883 mzf的考验 解题报告
  16. 虾皮Shopee上货铺货助理工具
  17. dubbo整体设计整理
  18. java (基础、框架)思维脑图
  19. 解决linux使用yum安装新版JDK时,Java文件夹下没有lib、bin等文件,只有jre的问题
  20. Javascript清除IE缓存

热门文章

  1. LINUX手动释放内存
  2. McAfee新手详尽攻略(转东转西)
  3. python 定时任务实现
  4. crmeb v4和pro公众号小程序客服配置详解
  5. 《庆余年》中范闲背了个诗,把这个 GitHub 项目带火了!
  6. 英雄何为:《新神榜:杨戬》的颠倒与失控
  7. html伪类元素加图片,CSS伪类选择器:before、:after使用:插入字符、插入图片、插入项目编号...
  8. 阿里巴巴16字管理真言
  9. 使用U大侠安装windows10 64位系统
  10. 梦幻诛仙服务器数据修改,《梦幻诛仙》2010年4月7日改良服务器架构