USACO 2.3.4 Money Systems 货币系统(完全背包)
Description
母牛们不但创建了他们自己的政府而且选择了建立了自己的货币系统。 [In their own rebellious way],,他们对货币的数值感到好奇。 传统地,一个货币系统是由1,5,10,20 或 25,50, 和 100的单位面值组成的。 母牛想知道有多少种不同的方法来用货币系统中的货币来构造一个确定的数值。 举例来说, 使用一个货币系统 {1,2,5,10,...}产生 18单位面值的一些可能的方法是:18x1, 9x2, 8x2+2x1, 3x5+2+1,等等其它。 写一个程序来计算有多少种方法用给定的货币系统来构造一定数量的面值。 保证总数将会适合long long (C/C++) 和 Int64 (Free Pascal)。
Input
货币系统中货币的种类数目是 V 。 (1<= V<=25) 要构造的数量钱是 N 。 (1<= N<=10,000) 第 1 行: 二整数, V 和 N 第 2 ..V+1行: 可用的货币 V 个整数 (每行一个 每行没有其它的数)。
Output
单独的一行包含那个可能的构造的方案数。
Sample Input
3 10
1 2 5
Sample Output
10 解题思路:我上来一直觉得这是一道搜索题,用DFS写了一下,果然时间超限,其实这是一道完全背包的变形。
dp[i][j]表示前i种货币构成钱j的方法数,用a记录货币的面值,状态转移方程为:
dp[i][j]=dp[i-1][j]; ///不用第i种货币
dp[i][j]=dp[i-1][j]+dp[i][j-a[i]] ///当j>=a[i]时,用第i种货币
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAX 10010
#define ll long long int
using namespace std;
int a[];
ll dp[][MAX];
int main()
{
int m,n;
int i,j;
scanf("%d%d",&n,&m);
for(i=;i<=n;i++)
{
scanf("%d",&a[i]);
dp[i][a[i]]=;
}
for(i=;i<=n;i++)
{
for(j=;j<=m;j++)
{
if(j>a[i])
{
dp[i][j]=dp[i][j-a[i]]+dp[i-][j];
}
else
{
dp[i][j]=dp[i][j]+dp[i-][j];
}
}
}
printf("%lld\n",dp[n][m]);
return ;
}
优化为一维滚动数组之后:
for(i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
dp[]=;
for(i=;i<=n;i++)
{
for(j=a[i];j<=m;j++)
{
dp[j]=dp[j]+dp[j-a[i]];
}
}
printf("%lld\n",dp[m]);
USACO 2.3.4 Money Systems 货币系统(完全背包)的更多相关文章
- Money Systems 货币系统(母函数)
Description 母牛们不但创建了他们自己的政府而且选择了建立了自己的货币系统. [In their own rebellious way],,他们对货币的数值感到好奇. 传统地,一个货币系统是 ...
- luogu5020 [NOIp2018]货币系统 (完全背包)
我那个新的货币系统,就是把原来的货币系统中能被其他数表示的数删掉 那我就算有多少数能被别的数表示,那肯定是要被比它小的表示 于是排个序做完全背包就好了 但是我太zz不会完全背包,然后写了个bitset ...
- 【洛谷P5020】货币系统 完全背包
题目大意:给定 N 个数,求在这 N 个数中至少选出几个数能表示出所有数字,输出最少的个数. 题解:由于只有小的数字可以表示大的数字,因此首先需要对这 N 个数字进行从小到大排序.排序之后就变成一道不 ...
- noip 2018 day1 T2 货币系统 完全背包
Code: #include<cstdio> #include<string> #include<cstring> #include<algorithm> ...
- 洛谷P1474 [USACO 2.3]货币系统 Money Systems [2017年4月计划 动态规划04]
P1474 货币系统 Money Systems 题目描述 母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对货币的数值感到好奇. 传统地,一个货币系统是由1 ...
- 洛谷P1474 货币系统 Money Systems
P1474 货币系统 Money Systems 250通过 553提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 母牛们不但创 ...
- 洛谷 P1474 货币系统 Money Systems 题解
P1474 货币系统 Money Systems 题目描述 母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对货币的数值感到好奇. 传统地,一个货币系统是由1 ...
- P1474 货币系统 Money Systems
题目描述 母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对货币的数值感到好奇. 传统地,一个货币系统是由1,5,10,20 或 25,50, 和 100的单 ...
- 【洛谷】P1474 货币系统 Money Systems(背包dp)
题目描述 母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对货币的数值感到好奇. 传统地,一个货币系统是由1,5,10,20 或 25,50, 和 100的单 ...
随机推荐
- vue父子组件之间的传值
引入组件 父组件 <div> <form-edit></form-edit> </div> import FormEdit from "路径& ...
- No space left on device 解决 Cydia 安装应用错误
在 Cydia 上搜索应用进行安装,提示错误:failed to write (No space left on device),从字面上的意思看是磁盘空间不够,导致写入错误,但是到 “关于” 里看到 ...
- HBase操作一
package Hbase; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.a ...
- abc sort
c: #include<stdio.h>//从大到小 int main(){ int a, b, c; int x = 0; printf("input message:\n&q ...
- [Golang学习笔记] 06 程序实体3 类型断言和类型转换
类型断言: 语法:<目标类型的值>,<布尔参数> := <表达式>.( 目标类型 ) // 安全类型断言<目标类型的值> := <表达式>. ...
- 浅谈JVM编译原理->.java文件转变为.class文件的过程
为什么需要编译? 我们平常写代码,有规范的命名方式,都能够看得懂,但是我们写的代码计算机是看不懂的,所以需要编译,也就是一个转换的过程,如下: 1.这个是咱们平时写的代码,就比较好理解,对人友好 2. ...
- xshell sftp可用命令,sftp: cannot open d: to write![解决]
sftp可用命令: cd 路径 更改远程目录到“路径” lcd 路径 更改本地目录到“路径” chgrp group path 将文件“path”的组更改为“group” chmod mode pat ...
- 20155301 2016-2017-2 《Java程序设计》第4周学习总结
20155301 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 1.关键词extends,表示SwordsMan会扩充Role的行为,然后再扩充Role原本 ...
- 关于Linux_shell中的管道命令pipe “|”的简单学习和使用
什么是 "|"? |其实是linux shell 中的一个命令:管道命令(pipe) 管道命令操作符是:"|",它仅能处理经由前面一个指令传出的正确输出信息,也 ...
- 移除VS解决方案和TFS服务器的关系
有时候会遇到服务器IP服务器变更,甚至TFS服务器坏了,或者将项目重新上传至新的TFS区: 可以使用notepad之类的软件打开解决方案(.sln文件),删掉类似下面的部分: GlobalSectio ...