Algorithm 幸运票(计算一定数量的幸运数字,具有所有数字的指定总和)

Algorithm 幸运票(计算一定数量的幸运数字,具有所有数字的指定总和),algorithm,dynamic-programming,Algorithm,Dynamic Programming,这是你的电话号码 给你一个数字1≤ N≤ 50每张票都有它的第2位数字。如果一张票的前N位数字之和等于最后N位数字之和,我们称它为幸运票。您还将获得数字中所有数字的总和。您的任务是计算一定数量的幸运数字,所有数字的总和都是指定的 对于输入2,输出为4(0101010101010) 你能帮我解决这个问题吗?最小复杂度是多少?如果所需的总和是s,则每一半必须有总和s/2。现在,您需要找到f(n,s/2):有多少个n位数字具有数字之和s/2。知道了f(n,s/2),你可以在一行中得到答案(试着自己找出

这是你的电话号码

给你一个数字1≤ N≤ 50每张票都有它的第2位数字。如果一张票的前N位数字之和等于最后N位数字之和,我们称它为幸运票。您还将获得数字中所有数字的总和。您的任务是计算一定数量的幸运数字,所有数字的总和都是指定的

对于输入2,输出为4(0101010101010)


你能帮我解决这个问题吗?最小复杂度是多少?

如果所需的总和是
s
,则每一半必须有总和
s/2
。现在,您需要找到
f(n,s/2)
:有多少个n位数字具有数字之和
s/2
。知道了
f(n,s/2)
,你可以在一行中得到答案(试着自己找出答案)

至于如何计算f(n,m):这是标准的DP。你有类似于
f(n,m)=f(n-1,m)+f(n-1,m-1)+f(n-1,m-2)+的递归公式f(n-1,m-9)
。这里,
0,1,2。。9
是给定数字最后一位的所有可能选项。如果最后一个数字是
k
,那么其余的数字是
(n-1)
-长数和数字之和
m-k

希望能有帮助

PS根据问题的约束条件,您需要一些长的算术来传递它。

私有静态布尔值(int n){
private static boolean isLucky(int n) {

    int sum1 = 0;
    int sum2 =0;
    String s = String.valueOf(n);
    System.out.println("After Conversion in String= " + s);
    for (int i = 0; i < (s.length()) / 2; i++) {
        System.out.println("half string === " + s.charAt(i));
        sum1 = sum1 + Character.getNumericValue(s.charAt(i));
    }
    System.out.println("half sum === " + sum1);
    for(int j=(s.length()) / 2 ; j< s.length();j++){
        System.out.println("half string === " + s.charAt(j));
        sum2 = sum2 + Character.getNumericValue(s.charAt(j));
    }
    System.out.println("another half sum === " + sum2);
    if(sum1 == sum2){
        return true;
    }
    return false;
}
int sum1=0; int-sum2=0; 字符串s=字符串。值(n); System.out.println(“在字符串中转换后=”+s); 对于(int i=0;i<(s.length())/2;i++){ System.out.println(“半字符串==”+s.charAt(i)); sum1=sum1+Character.getNumericValue(s.charAt(i)); } System.out.println(“半和==”+sum1); 对于(int j=(s.length())/2;j
在2011年秋季伯克利编程大赛上,这个问题也以问题2的形式出现。可以在此处找到整个问题集:。