首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >面试- Oracle

面试- Oracle
EN

Stack Overflow用户
提问于 2012-12-05 11:00:30
回答 4查看 873关注 0票数 4

在一个游戏中,唯一可以得分的是2,3,4,5,6,7,8,并且它们可以被任意次数地得分

团队可以玩的组合的总数是多少,团队可以达到的分数是50。

示例8,8,8,8,8,2是有效的8,8,8,8,4,4,2也是有效的。等等。

EN

回答 4

Stack Overflow用户

发布于 2012-12-05 11:48:13

这个问题可以用动态规划来解决,有两个参数:

  • i -我们拥有considered
  • s的索引-总分。

f(i, s)将包含获得s分数的方法总数。

假设score[]是可以取得的唯一正分数的列表。

DP解决方案的配方:

代码语言:javascript
复制
f(0, s) = 1, for all s divisible to score[0]
f(0, s) = 0, otherwise

f(i + 1, s) = Sum [for k = 0 .. floor(s/score[i + 1])] f(i, s - score[i + 1] * k)
票数 2
EN

Stack Overflow用户

发布于 2012-12-05 11:15:06

这看起来像是硬币兑换的问题。不久前我为它写了一些Python代码。

编辑的解决方案:

代码语言:javascript
复制
from collections import defaultdict

my_dicto = defaultdict(dict)

def row_analysis(v, my_dicto, coins):
    temp = 0
    for coin in coins:
        if v >= coin:
            if v - coin == 0: # changed from if v - coin in (0, 1):
                temp += 1
                my_dicto[coin][v] = temp
            else:                
                temp += my_dicto[coin][v - coin]
                my_dicto[coin][v] = temp
        else:
            my_dicto[coin][v] = temp
    return my_dicto

def get_combs(coins, value):
    '''
    Returns answer for coin change type problems.
    Coins are assumed to be sorted.

    Example:
        >>> get_combs([1,2,3,5,10,15,20], 50)
        2955
    '''
    dicto = defaultdict(dict)

    for v in xrange(value + 1):
        dicto = row_analysis(v, dicto, coins)

    return dicto[coins[-1]][value]

在您的案例中:

代码语言:javascript
复制
>>> get_combs([2,3,4,5,6,7,8], 50)
3095
票数 1
EN

Stack Overflow用户

发布于 2012-12-05 11:47:33

这就像访问一个7分支决策树。

代码是:

代码语言:javascript
复制
class WinScore{
static final int totalScore=50;
static final int[] list={2,3,4,5,6,7,8};
public static int methodNum=0;

static void visitTree( int achieved , int index){
        if (achieved >= totalScore ){
                return;
        }
        for ( int i=index; i< list.length; i++ ){
                if ( achieved + list[i] == totalScore ) {
                        methodNum++;
                }else if (  achieved + list[i] < totalScore ){
                        visitTree( achieved + list[i], i );
                }
        }
}
public static void main( String[] args ){
        visitTree(0, 0);
        System.out.println("number of methods are:" + methodNum );

}
}
output:
number of methods are:3095
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13715590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档