无限煎饼屋

时间:2015-04-12 02:13:07

标签: c++

以下是相关问题的链接: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最佳。

1 个答案:

答案 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

效率更高。