免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 发帖

[数论] (初一编程)第三回:统一货币

描述 Description
   连年征战之后,晋朝一统天下。为了方便各地百姓的交流、通商,皇上下令建立新的货币系统。财政大臣提出了多种方案供选择。为了得到最好的方案,皇上想知道有多少种不同的方法可以用货币系统中的货币来构造一个确定的数值。   
举例来说, 使用一个货币系统 {1,2,5,10}产生 18单位面值的一些可能的方法是:18x1, 9x2, 8x2+2x1, 3x5+2+1,等等其它。

输入格式 Input Format
第一行:两个整数v,n。v表示货币系统中货币的种类数目,n表示要构造的钱的数目。
        1<=v<=25,1<= n<=10,000
第二行:v个整数,表示系统中所有货币的面值。

输出格式 Output Format
单独的一行包含用这v种货币构造n的钱的总方案数。保证总数将会适合Int64 (Free Pascal),即在0 到2^63-1之间。

样例输入 Sample Input
3 10
1 2 5

样例输出 Sample Output
10

样例解释:就是10=x+2y+5z有10组非负整数解
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

有没办法找到不定方程比如1000=x+3y+5z+10t的非负解的个数或关于个数的递推办法
t=0,1,2,...100依次代入得到解的个数和,这个办法v,n比较大时,可能时间上会超出.

TOP

已经用记忆化的办法解决
比如100=10x+5y+2z+t的解的个数
相当于x=0,1,2,...,10时所有的解
x=0,与x=1时继续这个操作,发现有重叠部分(这部分就用记忆化办法)
x=0时100=5y+2z+t ,y=2,3,...相当于x=1时,90=5y+2z+t的y=0,1,..

TOP

返回列表 回复 发帖