P6205 [USACO06JAN] Dollar Dayz S

FJ在商场面临K种价格从1到K的工具,需用N元(1≤N≤1000)花完。博客讨论了如何计算不同购买方案的数量,采用动态规划方法,并解释了转移方程的逻辑,以及处理数值溢出的问题。文章包含两段代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

FJ 到商场买工具。商场里有 K 种工具(≤K≤100),价格分别为 1,2,…,K 元。FJ 手里有 N 元(1≤N≤1000),必须花完。他有多少种购买方案呢?

输入格式

一行两个整数 N,K。

输出格式

输出不同的购买方案数。

输入输出样例

输入 #1复制

5 3

输出 #1复制

5

我们令f[j]来表示我们选择到第j元钱的方案数

那么我们枚举一个i表示我们当前选了j−i元钱的东西,然后又选了这么一个价值为i的物品

那么我们肯定要保证i<j吧?

i=1∑k​j=i∑n​f[j]+=f[j−i];

为什么这里的是f[j]+=f[j−i]呢?

我们可以发现,当f[j−i]转移到 f[j]的时候, f[j−i]已经有了一些情况(显而易见(因为在枚举 f[j]之前,必定先枚举的 f[j−i],那么在转移的时候就不会出现像 f[j]转移了, f[j−i]没转移的情况

但是我们又发现,这肯定是炸 long long的

所以用了个小技巧 ---- 高精度

//用__i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值