Java 使用贪心法查找最小浪费会给出错误的输出
我试图用贪婪算法解决以下问题,但没有得到正确的输出 问题是: 这里是一个示例输入: 20 7 10467694 以下是模型输出: 217 我的输出是: 343 我的算法是一段java代码,如下所示:Java 使用贪心法查找最小浪费会给出错误的输出,java,greedy,minimize,Java,Greedy,Minimize,我试图用贪婪算法解决以下问题,但没有得到正确的输出 问题是: 这里是一个示例输入: 20 7 10467694 以下是模型输出: 217 我的输出是: 343 我的算法是一段java代码,如下所示: import java.io.FileNotFoundException; import java.io.FileReader; import java.util.ArrayList; import java.util.Scanner; public class Elevate {
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Scanner;
public class Elevate {
public static void main(String[] args) throws FileNotFoundException {
Scanner cin = new Scanner(new FileReader("elevate.in"));
int N, M, Weights, waste;
M = cin.nextInt();
N = cin.nextInt();
ArrayList<Integer> wieghts = new ArrayList<>();
ArrayList<Integer> WT = new ArrayList<>();
int numCase =1;
while(N != 0 && M != 0){
Weights = M;
waste = 0;
for (int i = 0; i < N; i++) {
wieghts.add(cin.nextInt());
}
for (int i = 0; i < N; ) {
if(wieghts.get(i) <= Weights){
Weights -= wieghts.get(i);
i++;
}
else{
//we cannot fit more people
//Start again
WT.add(Weights);
Weights = M;
}
}
for (int i = 0; i < WT.size(); i++) {
waste+= (WT.get(i) * WT.get(i) * WT.get(i));
}
System.out.println(numCase +": "+waste);
M = cin.nextInt();
N = cin.nextInt();
wieghts.clear();
WT.clear();
numCase++;
}
}
}
import java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.util.ArrayList;
导入java.util.Scanner;
公共阶层提升{
公共静态void main(字符串[]args)引发FileNotFoundException{
Scanner cin=新的扫描仪(新的文件读取器(“elevate.in”);
整数N,M,重量,损耗;
M=cin.nextInt();
N=cin.nextInt();
ArrayList wieghts=新的ArrayList();
ArrayList WT=新的ArrayList();
int numCase=1;
而(N!=0&&M!=0){
重量=M;
废物=0;
对于(int i=0;i 如果(wieghts.get(i)是217
您的全部输出?不,这是模型答案我的输出是:343Hmm,问题陈述表明输出应该是casenumber,TW
的形式,所以它不应该只是一个数字。“贪婪是一个错误的选择吗?”-我会说是的,因为结果TW是所有单个WF^3的总和。让我们假设你只得到2个WF-一个小的和一个大的可能比2个几乎相等的差(假设我们的总TF为4,那么1^3+3^3=28,而2^3+2^3=16).我想说的是,应该可以从总重量和最大容量中计算出平均WF。然后,您希望使每个WF尽可能接近该平均值。这不是问题(这可以通过一个简单的计数器解决)。我添加了完整的代码并解决了此问题。主要问题是我的算法不正确,或者样本输出不正确。217
您的整个输出?不,这是模型答案。我的输出是:343Hmm,问题陈述表明输出的形式应该是casenumber,TW
,因此它不应该只是一个数字。“贪婪是一个错误的选择吗?”-我会说是,因为结果TW是所有单个WF^3的总和。让我们假设你只得到2个WF-一个小的和一个大的可能比2个几乎相等的更差(假设我们的总TF为4,那么1^3+3^3=28,而2^3+2^3=16).我想说的是,应该可以从总重量和最大容量中计算出平均WF。然后,您希望使每个WF尽可能接近该平均值。这不是问题(这可以通过一个简单的计数器解决)。我添加了完整的代码并解决了此问题。主要问题是我的算法不正确或示例输出不正确