我给N个元素和它们的重量,我只需要从它们中选取M个元素,使它们的权重除以k。
For Ex:
N=5
Weight:1 2 3 4 5
M =3
K=5
so we will pick up : 1 4 5 as total 10 is divide by 5. So ans =10
我的方法:使用递归函数
public static int ans(int[] a,int m,int k,int total){
int sum=0;
if(a.length<m)
return Integer.MAX_VALUE;
if(m==0){
//System.out.println("ok");
if(total%k==0)
return total;
else
return Integer.MAX_VALUE;
}
int[] temp = new int[a.length-1];
for(int j=0;j<temp.length;j++)
temp[j]=a[j];
sum = Math.min(ans(temp,m,k,total), ans(temp,m-1,k,total+a[a.length-1]));
return sum;
}
但是这种方法对于非常大量的数据都失败了,有人可以帮助我在这里使用动态编程,这样我就不会重复调用。
答案 0 :(得分:0)
获取一个标志数组,为每个元素标记它们是否包含在结果中。从没有包含任何东西开始,如果包含它可以提供正确的结果,则递归地尝试每个元素。