C# 优化:回溯算法

C# 优化:回溯算法,c#,algorithm,backtracking,recursive-backtracking,C#,Algorithm,Backtracking,Recursive Backtracking,我有一个学校项目,我必须用c语言写一个程序。我想我的思路是对的,但我坚持这个问题。 在程序的这一部分我要写一个回溯算法。我有课(英语、物理、数学等),所有的课都有一个特定的时间。(例如1h、2h、3h、5h等)。此外,我还有maxClassHours,它显示了一个人今天可以在学校花多少时间。 该算法应尽可能收集填充此maxClassHours的所有可能的类组合 重要的是我只能上一节课!所以我只能上一节数学课。 例如,maxClassHours是5,因此我可以花5个小时坐在不同的课堂上。 假设

我有一个学校项目,我必须用c语言写一个程序。我想我的思路是对的,但我坚持这个问题。

在程序的这一部分我要写一个回溯算法。我有课(英语、物理、数学等),所有的课都有一个特定的时间。(例如1h、2h、3h、5h等)。此外,我还有maxClassHours,它显示了一个人今天可以在学校花多少时间。 该算法应尽可能收集填充此maxClassHours的所有可能的类组合

重要的是我只能上一节课!所以我只能上一节数学课。

例如,maxClassHours是5,因此我可以花5个小时坐在不同的课堂上。

假设我有这些课程:

  • 数学-2h
  • 物理-1h
  • 音乐-2h
  • 舞蹈-5h
  • P.E.-3h
  • 地理-5h
  • 英语-3h
  • 法语-1h
  • 科学-7h
  • 艺术-1h
目标是找到所有可能的组合(使用回溯算法)来填充这5个小时

我希望它有意义。。。谢谢你的帮助

编辑:我想了解回溯算法如何应用于这个问题


EDIT2:我花了几个小时试图解决这个问题,但没有取得重大进展,这就是为什么我要寻求帮助…

试试这个思考过程:

  • 选课
  • 我的总时间是否仍然小于最大值?
    • 如果是,请选择另一个类
    • 如果没有,请删除最后添加的类并在其位置添加其他类
  • 例如:

    最长为5小时

    | Class List                       | Total Time |
    |----------------------------------|------------|
    | Math                             | 2h         |
    | Math, Physics                    | 3h         |
    | Math, Physics, Music             | 5h (save)  |
    | Math, Physics, Dance             | 8h         |
    | Math, Physics, P.E.              | 6h         |
    | Math, Physics, Geography         | 8h         |
    | Math, Physics, English           | 6h         |
    | Math, Physics, French            | 4h         |
    | Math, Physics, French, Science   | 11h        |
    | Math, Physics, French, Art       | 5h (save)  |
    | Math, Music                      | 4h         |
    | ...                              | ...        |
    

    你的问题到底是什么?(如果是“SO社区会为我做我的学校项目吗?”,恐怕答案是否定的)你的代码在哪里?你在忙什么?帮我从这个开始。我想了解回溯算法如何应用于这个问题。“SO社区会为我做学校项目吗?”我不是在问这个问题。@nethuszar-你需要自己做这个研究-试试谷歌。当你有办法尝试时,就写一些代码,当你陷入困境时,就来问一个问题。这就是我们在这里工作的方式。谢谢你的回答。我有类似的东西,但问题是我必须找到所有可能的组合。所以找到一个好的组合对我来说很有用,但是找到所有的组合…为什么你不发布你到目前为止所拥有的呢?这样我们就可以提供更具体的帮助。它不是用英语写的,我觉得没有那么好。我的算法是这样的:从第一个类开始,如果它小于或等于maxTime,那么我添加它。检查列表中的第二节课如果第一节课的时间+这节课的时间是请注意我上面解释的最后一部分
    ,如果不是,请删除最后添加的课程,并在其位置添加一个不同的课程
    。找到大于或等于5h的组合后,需要删除添加的最后一个类,然后开始在其位置添加类,直到找到另一个大于或等于5h的组合。这正是我在示例中演示的内容。这种类型的问题适合于递归解决方案,如果没有递归,可能会更复杂一些。祝你好运