洛谷P1164小A点菜
一、题目描述
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点菜相关推荐
- 【01背包求方案数模板】洛谷 P1164 小A点菜
洛谷 P1164 小A点菜 https://www.luogu.org/problemnew/show/P1164 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆, ...
- 洛谷——P1164 小A点菜
P1164 小A点菜 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:"随便点" ...
- (Java实现)洛谷 P1164 小A点菜
题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:"随便点". 题目描述 不过ui ...
- 洛谷P1164 小A点菜
题目背景 uim 神犇拿到了 uoi 的 ra(镭牌)后,立刻拉着基友小 A 到了一家--餐馆,很低端的那种. uim 指着墙上的价目表(太低级了没有菜单),说:"随便点". 题目 ...
- 洛谷 P1164 小A点菜(01背包状态转移方程详细推导)
题目链接 今天刷题,本来背包问题感觉稳稳的懒得刷了,随手做两个就被卡住了, 原来自己只会做死板的背包,这种稍微变形的就不会推状态转移方程了 我又去看了一眼滚动背包的转变方法 加上大佬的题解,才稍微明白 ...
- 动态规划——小A点菜(洛谷 P1164)
题目选自洛谷P1164 这是一道简单的动规题,定义f[i][j]为用前i道菜用光j元钱的办法总数,其状态转移方程如下: (1)if(j==第i道菜的价格)f[i][j]=f[i-1][j]+1; (2 ...
- P1164 小A点菜 洛谷
P1164 小A点菜 洛谷 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:"随便点&qu ...
- 洛谷 P4430 小猴打架
洛谷 P4430 小猴打架 题目描述 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友.每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友.经过N-1次打 ...
- 2017提高组D1T1 洛谷P3951 小凯的疑惑
洛谷P3951 小凯的疑惑 原题 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想 ...
最新文章
- [物理学与PDEs]第4章习题3 一维理想反应流体力学方程组的数学结构
- apache php隐藏头信息的方法,科技常识:nginx/apache/php隐藏http头部版本信息的实现方法...
- Spring中注解大全和应用
- 【Android-NCNN-Vulkan】记录一次ncnn-vulkan在低性能开发板上出现的native内存溢出的问题
- 基于webpack的PC端和mobile端开发以及生产环境的搭建
- poj3276 反转 挑战程序设计竞赛
- linux内核I2C体系结构(注意结构体原型)
- ASP.NET的安全性
- 手机wap网页制作的认识(有关meta…
- FreeSwitch Originate API
- Python可视化:python画图字体设置
- ​LeetCode刷题实战518:零钱兑换 II
- 【不仅仅是程序员】——公司的沉淀是什么(2)
- 微信开发者工具小技巧——快速创建小程序的新页面。
- 洛谷 P4883 mzf的考验 解题报告
- 虾皮Shopee上货铺货助理工具
- dubbo整体设计整理
- java (基础、框架)思维脑图
- 解决linux使用yum安装新版JDK时,Java文件夹下没有lib、bin等文件,只有jre的问题
- Javascript清除IE缓存