题目大致意思应该是 分配i辆汽车搬运j台电脑的问题,与整数分解类似可以用递推来解决。
关键代码:
public int trans(int i,int j){ //i辆车 j台电脑
if(j<i) return 0;
if(i==1){
return 1;
}
return trans(i-1,j-1)+trans(i,j-i);
}
注:题目前提是不许某辆汽车搬运0台
(i辆汽车搬运j台电脑的方案数)=(有一辆仅搬1台的方案数)+(所有车辆搬一台以上的方案数)
故得递推式:
trans( i, j ) = trans(i-1,j-1)+trans(i,j-i);
这里trans( i, j ) 的含义是i辆汽车搬运j台电脑,并且不允许某辆汽车为空的总的方案数,
所以递推式的下界: if(j<i) return 0;
if(i==1) return 1;
java求解代码如下:
import java.util.Date;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Main m=new Main();
Scanner scan=new Scanner(System.in);
int i,j;
while(true){
j=scan.nextInt();
i=scan.nextInt();
if(i==0&&j==0) break;
long time1=new Date().getTime();
System.out.println(m.trans(i,j));
System.out.println(new Date().getTime()-time1+"时间");
}
}
public int trans(int i,int j){ //i辆车 j台电脑
if(j<i) return 0;
if(i==1){
return 1;
}
return trans(i-1,j-1)+trans(i,j-i);
}
}