Poj 1742 Coins

本文讨论了如何使用动态规划解决多重组合数问题,包括问题定义、DP状态转移方程、空间优化技巧和时间复杂度分析。重点强调了在处理给定限制条件时的空间和时间效率优化。

题意:

  给定N个面值,a1..an,每种面值都有c1..cn个,问从1..m的面值中,有多少个可以用已经给定的面值组成?

 

分析:

   还记得“多重组合数”问题么?

   DP[K][N]——用前N种数字组成K,第N种可以剩下最多多少个。

   证明分析就不给出了,见前面的博文吧。时间复杂度为K*N

 

这道题有点意思的地方就是,给定的几个限制,在空间上,时间上都需要很注意,不然很容易超出。

这里面的M的范围为100000,N为100。

 

空间限制为300000K,int型数组开100000*100的话,刚好超出一点,为了简单方便,我们使用&1优化(奇偶优化),使得空间复杂度变为10000*2.

时间上,用G++交的话会超时....——目前不太明白。

C++交的,最后是2903ms过的,刚好...

转载于:https://www.cnblogs.com/dandi/p/3994828.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值