Algorithm 幸运票(计算一定数量的幸运数字,具有所有数字的指定总和)
这是你的电话号码 给你一个数字1≤ N≤ 50每张票都有它的第2位数字。如果一张票的前N位数字之和等于最后N位数字之和,我们称它为幸运票。您还将获得数字中所有数字的总和。您的任务是计算一定数量的幸运数字,所有数字的总和都是指定的 对于输入2,输出为4(0101010101010)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),你可以在一行中得到答案(试着自己找出
你能帮我解决这个问题吗?最小复杂度是多少?如果所需的总和是
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的形式出现。可以在此处找到整个问题集:。