背包问题 1

package algorithm; import static myutil.Print.print; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; /* * (背包问题1):已知n件物品重量w1,w2,……wn和背包能装载的重量s * 问能否从这几件物品中选出若干件{wi1,wi2,wi3,…wim} * 其重量之和恰为s(刚好装入背包)。 */ /* * 假设当前要装入背包n,那么两种状态:1^ n被装进去 | 2^ 没有装进去。 * 1^是否超重?不超重 * */ public class PackageProblem { private static Integer[] weightPerfuck = {1,2,3,4,5 }; //args: // n : 当前物品的flag // s :当前还需的重量 public static boolean kmp(int n , int s) { if(s == 0) return true; else if(s < 0 || n < 0) return false; else if(kmp(n-1 , s-weightPerfuck[n-1])) return true; else return (kmp(n-1 , s)); } public static void main(String[] args) { print("请输入每件物品的重量:"); //接收重量 int n = weightPerfuck.length; int s = 8; if(kmp(n , s)) print("OK!"); else print("NO!"); } }  

 

result

请输入每件物品的重量: OK! 

以上是第一类背包问题,只有一个变量的那种,还有第二种背包问题,更加复杂。

嗯,一开始老是出错,debug发现时myit.next()出错,感觉他没办法和递归保持同步(或者是我编的问题??)

出错的代码

 

public static boolean kmp(int n , int s) { if(s == 0) return true; else if(s < 0 || n < 0) return false; else if(kmp(n-1 , s-weightPerfuck.iterator().next())) return true; else return (kmp(n-1 , s)); } 

en ...看来容器还是不好掌握啊。。。我菜了

你可能感兴趣的:(String,Integer,Class)