打卡信奥刷题(1013)用C++实现信奥 P1474 [USACO2.3] Money System / [USACO07OCT]Cow Cash G

P1474 [USACO2.3] Money System / [USACO07OCT]Cow Cash G

题目描述

母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统。由于它们特殊的思考方式,它们对货币的数值感到好奇。

传统地,一个货币系统是由 1,5,10,20,25,50,1001,5,10,20,25,50,1001,5,10,20,25,50,100 的单位面值组成的。

母牛想知道有多少种不同的方法来用货币系统中的货币来构造一个确定的数值。

举例来说, 使用一个货币系统 (1,2,5,10,…)(1,2,5,10, \ldots)(1,2,5,10,) 产生 181818 单位面值的一些可能的方法是:18×1,9×2,8×2+2×1,3×5+2+118 \times 1, 9 \times 2, 8 \times 2+2 \times 1, 3 \times 5+2+118×1,9×2,8×2+2×1,3×5+2+1,等等。

写一个程序来计算有多少种方法用给定的货币系统来构造一定数量的面值。保证总数在 646464 位带符号整数的范围内。

输入格式

第一行两个整数:货币系统中货币的种类数目 VVV1≤V≤251 \leq V \leq 251V25)。要构造的数量钱是 NNN1≤N≤10,0001 \leq N \leq 10,0001N10,000)。

第二行 VVV 个整数,代表所有可用的货币的面值。

输出格式

单独的一行,包含用这 VVV 种硬币凑足 NNN 单位货币的方案数。

输入输出样例 #1

输入 #1

3 10
1 2 5

输出 #1

10

说明/提示

翻译来自NOCOW

USACO 2.3

C++实现

#include
#include
#include
#define maxn 400010
#define ll long long//定义ll为long long
ll p[maxn];
ll v,n,sum[maxn],f[maxn];
using namespace std;
int main()
{
cin>>v>>n;
for(int i=1;i<=v;++i)
cin>>p[i];
f[0]=1;
for(int i=1;i<=v;++i)
for(int j=p[i];j<=n;++j)
f[j]=f[j]+f[j-p[i]];
printf(“%lld”,f[n]);
return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值