P1164 小A点菜
原题链接 https://www.luogu.org/problemnew/show/P1164
此题是一道简单的动规问题 才学两天不是很熟练,我苦思冥想看着题解终于想出来了。
主要的思路如下:
我们可以用二维数组f【i】【v】来储存点第i道菜时已经花了v元的方案数,用一维数组jq【i】来储存第i道菜的价格,那么有如下三种情况:
1.若jq【i】==v时,说明前面i-1道菜所花的钱的总和等于第i道菜的价钱,那么这时我们可以用第i道菜来代替前i-1道菜,这样的话方案数就多了一种,所以f【i】【v】=f【i-1】【v】+1;
2.若jq【i】<v时,说明第i道菜的价钱小于前i-1道菜所花的钱,所以我们可以舍弃前面的某几道菜来买第i道菜,这样可以使得我们的方案数增加,那么这时我们可以选择是否买第i道菜,如果买,那么前i-1道菜就要花掉v-jq【i】的钱数;如果不买,那么前i-1道菜就要花掉v的钱数。
根据分类加法原理得出:这种情况的总方案数就是两种情况的总和,即f【i】【v】=f【i-1】【v-jq【i】】+f【i-1】【v】;
3.若jq【i】>v时,说明第i道菜的价钱大于前i-1道菜所花的钱的总和,所以我们不能买第i道菜,那么这时的方案数为前i-1道菜花v元钱的方案数,即f【i】【v】=f【i-1】【v】;
弄完了状态转移方程,那么这个题解起来就游刃有余了,上代码!
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,m,f[][]={},jq[]; //f数组表示第i道菜花了v元的方案数,jq数组存放每道菜的价钱
cin>>n>>m;
for(int i=;i<=n;i++)
cin>>jq[i];
for(int i=;i<=n;i++) //从1~n道菜
{
for(int v=;v<=m;v++)
{
if(jq[i]==v) f[i][v]=f[i-][v]+; //核心代码,上面已经分析过了,不做过多解释
if(v>jq[i]) f[i][v]=f[i-][v]+f[i-][v-jq[i]];
if(v<jq[i]) f[i][v]=f[i-][v];
}
}
cout<<f[n][m]; //最多方案数一定在最后的f【n】【m】里,因为后面的方案数是从前面一个个累积过来的
return ; }
P1164 小A点菜的更多相关文章
- 洛谷P1164 小A点菜(01背包求方案数)
P1164 小A点菜 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过u ...
- 洛谷——P1164 小A点菜
P1164 小A点菜 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过u ...
- 洛谷P1164 小A点菜 [2017年4月计划 动态规划08]
P1164 小A点菜 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过u ...
- P1164 小A点菜【dp】
P1164 小A点菜 提交 43.03k 通过 24.37k 时间限制 1.00s 内存限制 125.00MB 题目提供者洛谷 难度普及- 历史分数100 提交记录 查看题解 标签 洛谷原创 查看 ...
- 洛谷 p1164 小A点菜 【dp(好题)】 || 【DFS】 【恰好完全装满】
题目链接:https://www.luogu.org/problemnew/show/P1164 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. u ...
- 【洛谷P1164 小A点菜】
题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过uim由于买了一些辅(e ...
- 洛谷P1164 小A点菜 DP入门
原题传输门>>https://www.luogu.org/problem/show?pid=1164<< 前几天开始联系DP的,一路水题做到这,发现这题套不了模板了QAQ 在大 ...
- P1164 小A点菜 洛谷
题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过uim由于买了一些辅(e ...
- 洛谷 P1164 小A点菜
题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过uim由于买了一些辅(e ...
- luogu P1164 小A点菜
题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过uim由于买了一些辅(e ...
随机推荐
- Dockerfile centos7_tomcat7.0.64_jdk7u80
FROM centos:7 MAINTAINER jiangzhehao WORKDIR /tmp RUN yum -y install net-tools ADD jdk-7u80-linux-x6 ...
- 怎么用npm发布一个包,详细教程
我们已经实现了路由的自动化构建,但是我们可以看到,一大串代码怼在里面.当然你也可以说,把它封装在一个JS文件里面,然后使用require('./autoRoute.js')给引入进来,那也行.但是,为 ...
- Java 常见编码格式——URL、Base64
数据编码 我们对数据进行编码是因为在某些情况下,不能直接传输中文字符或者其他字符,比如在设置http协议的头部信息或者cookie时,如果value有中文字符,那么就需要将中文字符使用某种编码方式进行 ...
- 【问题解决方案】The MathType Dll cannot be found 问题解决方案
先贴几个可能的方法: 如何解决MathPage.wll或MathType.dll文件找不到问题 The MathType Dll cannot be found 问题解决办法 如果还搞不定,试试卸载重 ...
- EF内容记录_EF连接Mysql版本问题
EF连接MySQL可用版本,由于EF.MySQLConnection.mysql-for-visualstudio.VS版本.MySQL.Data.MySQL.Data.Entity版本问题较花时间, ...
- Eclipse中修改jsp、html……的编码格式
一般如果使用的是Eclipse的默认编码格式,在我们保存的时候会提示选择保存的编码格式,保存后英文没有问题,但是中文就会乱码. 修改方式是: Windows——>Preferences——> ...
- Granfana+PostgreSQL
建表: create table pdm_log( id serial primary key, date_time timestamp with time zone DEFAULT CURRENT_ ...
- Python自动化运维之pexpect从入门到精通
1. 应用场景 模拟ssh, telnet远程登录, 模拟ftp文件上传 2. 安装 参考资料: <pexpect实例分析>https://www.ibm.com/developerwor ...
- 微信小程序wxml無法實現頁面跳轉的問題
wxml的 navigator的url設置后無法跳轉? 檢查要跳轉的頁面是否是在APP.json的tabBar里註冊過,如果是tabBar頁面是不能用wx.navigateTo和wx.Redirect ...
- Python——FTP上传和下载
一.FTP对象方法说明 login(user='anonymous',passwd='', acct='') 登录 FTP 服务器,所有参数都是可选的 pwd() 获得当前工作目录 cwd(path) ...