看着题目提示的时间会很长的时候就想到了记忆化搜索,但是一直不知道该咋写,看了大神的发现直接开一个三维的数组所有的情况的结果都不会超过20,所以有一下代码;
package 练习;
import java.util.*;
import java.io.*;
import java.lang.*;
import java.util.*;
public class Main {
static Scanner scanner=new Scanner(System.in);
static int a[][][];
public static void main(String[] args) {
a=new int [21][21][21];
show();
while(true) {
int a=scanner.nextInt();
int b=scanner.nextInt();
int c=scanner.nextInt();
if(a==-1&&b==-1&&c==-1)return;
System.out.println("w("+a+", "+b+", "+c+") = "+showw(a,b,c));
}
}
private static void show() {
for(int i=0;i<21;i++) {
for(int j=0;j<21;j++) {
for(int k=0;k<21;k++) {
if(i<j&&j<k) {
a[i][j][k] = showw(i,j,k-1) + showw(i,j-1,k-1) - showw(i,j-1,k);
}else {
a[i][j][k] = showw(i-1,j,k) + showw(i-1,j-1,k) + showw(i-1,j,k-1) - showw(i-1,j-1,k-1);
}
}
}
}
}
private static int showw(int i, int j, int k) {
if(i <= 0 || j <= 0 || k <= 0)
return 1;
if(i > 20 || j > 20 || k > 20)
return a[20][20][20];
else
return a[i][j][k];
}
}