利用穷举法解决01背包问题
2016-08-23 10:55
197 查看
01背包动态规划算法可能有很多人不理解,贴出一个利用递归穷举法解决01背包问题的代码
package homework; import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * Created by fushuang on 2016/8/15. */ public class bahe { public static int jishu=0; //如果用例为4 6 6 5 3 jishu输出的值为16哦~ 最后func生成的结果却是只有12次,但是四组3个数的比一次,然后再每组的冠军有进行了一次比较 //代码思路,递归每次将一个人放入第一组,最后得出的结果为4 *3种结果,也就值最终返回fanc具体数值的个数, //12个数分为四组 每三个和max比较 //12 + 4 一共为16次 public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int count=scanner.nextInt(); int sum=0; ArrayList<Integer> list = new ArrayList<>(); ArrayList<Integer> firstlist = new ArrayList<>(); for (int i = 0; i <count ; i++) { int a=scanner.nextInt(); list.add(i,a); sum=sum+a; } System.out.println(list); sum=sum/2; count=count/2; System.out.println("第一队与平均值之间的差值:"+func(list, sum, count, firstlist)); System.out.println("第一队的人为"+firstlist); list.removeAll(firstlist); System.out.println("第二队的人为"+ list); System.out.println(jishu); } public static int func(List<Integer> list,int sum,int count,List<Integer> firstlist){ ArrayList<Integer> finallist=new ArrayList<>(); if (firstlist.size()==count){ int first_sum=0; for (Integer a : firstlist) { first_sum=first_sum+a; } return Math.abs(first_sum-sum); }else { int min=Integer.MAX_VALUE; for (int i = 0; i < list.size(); i++) { ArrayList<Integer> templist = new ArrayList<>(list); ArrayList<Integer> ftemlist = new ArrayList<>(firstlist); ftemlist.add(templist.remove(i)); int func = func(templist, sum, count, ftemlist); jishu++; if (func<min){ min=func; finallist.clear(); finallist.addAll(ftemlist); } } firstlist.clear(); firstlist.addAll(finallist); return min; } } }
相关文章推荐
- 利用穷举法解决组合问题,背包问题,变量相等问题
- (转载)利用 .NET 框架简化发布和解决 DLL Hell 问题
- 利用Observer模式解决组件间通信问题
- Web程序中利用web.config解决无法输出excel页面的问题
- sql server 2005 中的利用ROW_NUMBER() 解决数据分页问题
- 利用sprint设置解决中文显示问题,web.xml
- 如何解决移动应用中 PeekMessage 调用的资源利用问题
- 利用.NET的XML序列化解决系统配置问题
- Web程序中利用web.config解决无法输出excel页面的问题
- Web程序中利用web.config解决无法输出excel页面的问题
- 利用触发器和INSERT INTO ...SELECT...解决Oracle 数据匹配问题
- 利用.NET的XML序列化解决系统配置问题
- 如何利用网络解决技术问题
- 利用errorstack event解决问题
- 利用WebBrowser彻底解决Web打印问题
- 利用netBeans开发JSP+javaBeans总是出错问题的解决
- 利用动态SQL解决排序问题
- 利用errorstack event解决问题
- 利用扩展ActionServlet,解决中文编码问题
- 利用Repeater解决DataGrid的嵌套显示问题