当前位置: 首页 > news >正文

P1164 小A点菜

P1164 小A点菜

题目背景

uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种。

uim指着墙上的价目表(太低级了没有菜单),说:“随便点”。

题目描述

不过uim由于买了一些辅(e)辅(ro)书,口袋里只剩M元(M<=10000)。

餐馆虽低端,但是菜品种类不少,有N种(N<=100),第i种卖ai元(ai<=1000)。由于是很低端的餐馆,所以每种菜只有一份。

小A奉行“不把钱吃光不罢休”,所以他点单一定刚好吧uim身上所有钱花完。他想知道有多少种点菜方法。

由于小A肚子太饿,所以最多只能等待1秒。

输入输出格式

输入格式:

 

第一行是两个数字,表示N和M。

第二行起N个正数ai(可以有相同的数字,每个数字均在1000以内)。

 

输出格式:

 

一个正整数,表示点菜方案数。

 

输入输出样例

输入样例#1:
4 4
1 1 2 2
输出样例#1:
3

分析:01背包+加法原理。
如果是一维的话,f[] 表示的是以及价格多少是方案,f[i] 价格为i时,方案数是多少。
那么 状态转移方程就是 f[v] += f[v-w[i]]
为什么是加呢,第一题目要求求方案总数,
第二因为既然有价格是w[i]的菜,这就说明价格是 v-w[i] 时,再选上这份菜价格刚好是v,所以:价格 v 的方案数加上价格 v-w[i] 的方案总数就是价格 v 的方案总数。
f[v] += f[v-w[i]];
 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 
 5 int f[10010];
 6 int w[110];
 7 int n,m;
 8 int main()
 9 {
10     scanf("%d%d",&n,&m);
11     for(int i=1;i<=n;++i)
12         scanf("%d",&w[i]);
13     f[0] = 1; 
14     for(int i=1;i<=n;++i)
15     {
16         for(int v=m;v>=w[i];--v)
17         {
18             f[v] += f[v-w[i]];
19         }
20     }
21     printf("%d",f[m]);
22     return 0;
23 }

二维,也可以做。f[i][v] 表示选择了 i 件物品,价格刚好是v是方案总数。

f[i][v] = f[i-1][v]+f[i-1][v-w[i]];

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 
 5 int f[110][10010];
 6 int w[110];
 7 int n,m;
 8 
 9 int main()
10 {
11     scanf("%d%d",&n,&m);
12     for(int i=1;i<=n;++i)
13         scanf("%d",&w[i]);
14     f[0][0] = 1;
15     for (int i=1;i<=n;++i)
16     { 
17         for (int v=0;v<=m;++v)
18         {
19             if (v>=w[i]) f[i][v] = f[i-1][v]+f[i-1][v-w[i]];
20             else f[i][v] = f[i-1][v];
21         }
22     }
23     printf("%d",f[n][m]);
24     return 0;
25 }

 



转载于:https://www.cnblogs.com/mjtcn/p/6867998.html

相关文章:

  • 新建虚拟机
  • OpenCV探索之路(五):图片缩放和图像金字塔
  • 99%的人都理解错了HTTP中GET与POST的区别
  • spring的定时任务
  • 利用QPainter绘制散点图
  • 创业经历
  • 黑客入门之单机游戏外挂
  • 如何在本地计算机打开网络文件夹(汇总)
  • 颠倒数组元素顺序reverse()
  • python模块整理
  • 小代码背后的大道理
  • LeetCode 103. Binary Tree Zigzag Level Order Traversal
  • Java Web学习笔记-1
  • MFC exe使用C++ dll中的std::string 崩溃
  • Qt graphic item日记
  • 网络传输文件的问题
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • Fundebug计费标准解释:事件数是如何定义的?
  • If…else
  • PV统计优化设计
  • react-native 安卓真机环境搭建
  • React的组件模式
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 构建二叉树进行数值数组的去重及优化
  • 树莓派 - 使用须知
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 学习笔记TF060:图像语音结合,看图说话
  • 一个JAVA程序员成长之路分享
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #微信小程序:微信小程序常见的配置传值
  • (1)(1.9) MSP (version 4.2)
  • (12)Linux 常见的三种进程状态
  • (Oracle)SQL优化技巧(一):分页查询
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (二)springcloud实战之config配置中心
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)Oracle存储过程编写经验和优化措施
  • .jks文件(JAVA KeyStore)
  • .naturalWidth 和naturalHeight属性,
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .net下的富文本编辑器FCKeditor的配置方法
  • .Net中的集合
  • @Autowired多个相同类型bean装配问题