以下是相关问题的链接:https://code.google.com/codejam/contest/6224486/dashboard#s=p1
好的,所以我对这个问题有点挂了。既然现在已经结束了,那么有谁知道为什么这不会起作用?我已经检查了大约50个不同的案例,并且找不到一个不起作用的案例。以下是我的完整代码。
基本上,寻找我的算法可能会破坏的任何情况。
//Includes
#include <iostream>
#include <fstream>
#include <list>
#include <algorithm>
#include <stdlib.h>
using namespace std;
//Functions
int solve(list<int>);
//Main
int main() {
int minutes = 0;
int numTestCases = 0;
int initNonEmpty = 0;
char tempChar;
int tempInt;
list<int> people;
//Import Data
//Get number of Test cases
ifstream infile;
infile.clear();
infile.open("B-small-attempt5.in");
//get NumTestCases
infile >> numTestCases;
int solution[numTestCases];
//Solve it
for(int i=0; i<numTestCases; i++){
//Reset vars
initNonEmpty=0;
infile >> initNonEmpty;
people.clear();
//Input data
for(int j=0; j<initNonEmpty; j++){
infile >> tempInt;
cout << tempInt;
people.push_back(tempInt);
}
cout << endl;
//Solve the set
people.sort();
people.reverse();
tempInt = solve(people);
cout << "Solve returns: " << tempInt << endl << endl;
solution[i] = tempInt;
}
//Output
ofstream outfile;
outfile.open("RealCase6.out");
for (int i=0; i < numTestCases; i++){
cout << "Case #" << i+1 << ": " << solution[i] << endl;
outfile << "Case #" << i+1 << ": " << solution[i] << endl;
}
}
int solve( list<int> data){
cout << "Starting Solve functions." << endl;
int tempMax;
int max =data.front();
int test=0;
cout << "Max: " << max << endl;
//Test if base case
if(max<=3){
cout << "Reached base case." << endl;
return max;
}
else if (max % 2 == 0 ){
cout << "Max is even" << endl;
tempMax = max/2;
data.pop_front();
data.push_back(tempMax);
data.push_back(tempMax);
data.sort();
data.reverse();
test=solve(data);
test=test+1;
cout << "test is:" << test << endl;
cout << "max is:" << max << endl;
if( test<=max){
return test;
} else {
return max;
}
}
else {
cout << "Max is odd" << endl;
tempMax = max/2;
data.pop_front();
data.push_back(tempMax);
data.push_back(tempMax+1);
data.sort();
data.reverse();
test=solve(data);
test=test+1;
cout << "test is:" << test << endl;
cout << "max is:" << max << endl;
if(test<=max){
return test;
} else {
return max;
}
}
}
这是我输入/输出的6种不同情况。 https://www.dropbox.com/sh/55wq52lzuygd82s/AABYxJJ7zaeoMhgCmymJcwnAa?dl=0
如果现在开始询问问题还为时过早,我会删除它。抱歉eh格式化,但我试图快速完成这项工作。
Edit1:添加了问题链接。
Edit2:其他人发现错误。我只考虑将事物分成2组,这给出了一个人有9个煎饼的情况,其中将它分成6和3组然后3 3 3最佳。
答案 0 :(得分:3)
如果分成非等效堆栈更有效,则会中断。例如,案例
1
9
其中一个人有9个煎饼。尽可能均匀地划分为2个组给出解决方案:
分1:
9
最小2:5 4
最小3:4 3
min 4:3 2
分钟5:2 1
分钟6:1 0
分7:0 0
其中不均匀地划分给出解决方案
分1:
9
最小2:3 6
最小3:3 3 3
min 4:2 2 2
分钟5:1 1 1
分钟6:0 0 0
效率更高。