先给出一个我写的动态规划方法的解法,求出最大活动集合中活动的个数。
public class Activitychoice {
//s,f是活动的开始时间和结束时间数组
public static int[] s={1,3,0,5,3,5,6,8,8,2,12};
public static int[] f={4,5,6,7,9,9,10,11,12,14,16};
public static int mmax = 0;
public static int activity(int i,int j){
if(j-i<=1){return 0;}
ArrayList<Integer> a = new ArrayList<Integer>();
for(int n = i+1;n<j;++n){
if(s[n]>=f[i]&&f[n]<=s[j]){
a.add(n);
}
}
if(a.isEmpty()){
return 0;
}
for(int k:a){
int res = activity(i,k)+activity(k,j)+1;
if(res>mmax){
mmax = res;
System.out.println(k);
}
}
return mmax;
}
这个方法可以求出最大兼容活动集合中活动的个数,如果想求出具体包含什么活动,可以递归地对最后的k,但是只能求出一个集合...如果想求出所有最大兼容活动集合可以思考思考 ^_^..