第一题背包求解 暴力只过了0.3 public long Solve(int n, int m, int[] weights) { long min = 0; long max = 0; for(int i=0;i<n;i++){ min+=weights[i]; if(weights[i]>max) max = weights[i]; } if(min%m!=0) min=(long)(min/m)+1; else min = min/m; min=Math.max(min, max); while(beibao(min,n,m,weights)==false) { System.out.println(min); min++; } return min; } public boolean beibao(long min,int n,int m,int[] weights) { int t = m-1; //t是指还剩几个背包 long k = 0; //k指当前背包装了多少东西 for(int i=0;i<n;++i) { if(k+weights[i]<=min && t>=0) { k+=weights[i]; continue; }else if(t>0) { //当前背包装不下第i个,换个新背包装第i个,且最少有一个新背包 --t; k=weights[i]; } else{ //所有背包都用完,t=0 //还没有跳出循环,即还有石头没装下 return false; } } return true; }

相关推荐

06-17 00:26
门头沟学院 Java
程序员小白条:建议换下项目,智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend 智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem 选项目要选自己能掌握的,然后最好能自己拓展的,分布式这种尽量别去写,不然你只能背八股文了,另外实习的话要多投,尤其是学历不利的情况下,多找几段实习,最好公司title大一点的
无实习如何秋招上岸
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务