|
|
newkid 发表于 2012-8-1 22:57 ![]()
1分是特例,这里只是为了展示其原理。
其实这道题有更好的递归解法,可以算几百块的分解方法。你想想看? ...
郁闷,以后睡前再也不合计问题了。不到5点就醒了,满脑子都是硬币。。。你所说的递归是这样的么?- with t as (
- select (rownum-1)*50 val, 50 id from dual connect by rownum <=3 union all
- select (rownum-1)*25 val, 25 id from dual connect by rownum <=5 union all
- select (rownum-1)*10 val, 10 id from dual connect by rownum <=11 union all
- select (rownum-1)*5 val, 5 id from dual connect by rownum <=21),
- tmp1 as (
- select connect_by_root(val) + val val, id
- from t
- where id=25
- start with id=50
- connect by prior id>id and prior val<=100-val),
- tmp2 as (
- select connect_by_root(val) + val val, id
- from (select * from t where id<=10 union all select * from tmp1)
- where id=10
- start with id=25
- connect by prior id>id and prior val<=100-val),
- tmp3 as (
- select connect_by_root(val) + val val, id
- from (select * from t where id<=5 union all select * from tmp2)
- where id=5
- start with id=10
- connect by prior id>id and prior val<=100-val)
- select count(*) from tmp3;
复制代码 |
|