你的红包我收了

完整代码:
package day0611;
import java.util.ArrayList;
import java.util.List;
public class Demo2 {
static int max = 0;//最大价格
static List<Integer> retls = new ArrayList<Integer>();//符合条件的那一组数据
static int[] sn;
static int[] vn;
static int C;
public static void main(String[] args) {
//控制台输入过程自己完成
int n = 4;
sn = new int[]{2,3,4,7};//物品体积
vn = new int[]{1,3,5,9};//物品价值
C = 10;//总体积
//用来放物品 里面存放的是sn的索引
List<Integer> sl = new ArrayList<Integer>();
putNext(sl);
System.out.println("最大价值:"+max);
System.out.println("放入的物品是:");
for(int i:retls) {
System.out.print(sn[i]+" ");
}
}
static void putNext(List<Integer> sl) {
for(int i=0;i<sn.length;i++) {
sl.add(i);
int volume = calculateS(sl);//计算现在的体积
if(volume <= C) {//可以继续放
//放之前获取max
int value = calculateV(sl);//计算价格
if(value > max) {
max = value;
retls = new ArrayList<Integer>();
for(int j:sl) {
retls.add(j);
}
}
//继续放
putNext(sl);//调用自己
}
//
sl.remove(sl.size()-1);//移除最后放入的从而回溯
}
}
//计算总体积
static int calculateS(List<Integer> ls) {
int sum = 0;
for(int i:ls) {
sum+= sn[i];
}
return sum;
}
//计算总价格
static int calculateV(List<Integer> ls) {
int sum = 0;
for(int i:ls) {
sum+= vn[i];
}
return sum;
}
}