Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 派对日程-经典背包_C++_Algorithm_Knapsack Problem - Fatal编程技术网

C++ 派对日程-经典背包

C++ 派对日程-经典背包,c++,algorithm,knapsack-problem,C++,Algorithm,Knapsack Problem,输入是可用预算、派对数量、每个派对的票价以及派对的乐趣。任务是用可用预算和使用的预算输出最大可能的乐趣。如果你能在两个同样有趣的派对中进行选择,那就选一个更便宜的吧。(这是一个例子。) 我创建了两个阵列: m[i][j]是我和所有人在一起的最大乐趣 预算j p[i][j]py的最低价格,从派对中获得最大乐趣 截至i,预算j 然后,对于每个i至#缔约方和每个j至预算,我计算m[i][j]和p[i][j]的值,如下所示: for(T i = 1; i <= parties; i++) {

输入是可用预算、派对数量、每个派对的票价以及派对的乐趣。任务是用可用预算和使用的预算输出最大可能的乐趣。如果你能在两个同样有趣的派对中进行选择,那就选一个更便宜的吧。(这是一个例子。)

我创建了两个阵列:

  • m[i][j]
    是我和所有人在一起的最大乐趣 预算j
  • p[i][j]
    py的最低价格,从派对中获得最大乐趣 截至i,预算j
然后,对于每个i至#缔约方和每个j至预算,我计算
m[i][j]
p[i][j]
的值,如下所示:

for(T i = 1; i <= parties; i++) {
    for(T j = 0; j <= budget; j++) {
        //We get more fun by attending party i
        if(price[i] <= j && m[i-1][j-price[i]] + fun[i] > m[i-1][j]) {
            m[i][j] = m[i-1][j-price[i]] + fun[i];
            p[i][j] = p[i-1][j-price[i]] + price[i];
        //We get same fun by attending i, but more cheaply
        } else if(price[i] <= j && m[i-1][j-price[i]] + fun[i] == m[i-1][j] && p[i-1][j-price[i]] + price[i] < p[i-1][j]) {
            m[i][j] = m[i-1][j-price[i]] + fun[i];
            p[i][j] = p[i-1][j-price[i]] + price[i];
        //We can't visit the party
        } else {
            m[i][j] = m[i-1][j];
            p[i][j] = p[i-1][j];
        }
    }
}

for(ti=1;i我检查了您的完整代码,但没有检查您的逻辑,但肯定有一些错误点:

  • 您将
    price
    数组内部函数标记为
    price[parties]
    ,该函数只允许
    price[0..parties-1]
    ,但您最多使用了
    price[parties]
    ,与
    fun[]
    相同
  • 您的
    while
    的条件是
    while(scanf(“%u%u”,&budget,&parties),budget!=0&&parties!=0)
    ,但是
    budget
    即使在有效输入中也可以
    0
    ,因此您的程序可能会比预期提前终止
  • 您在函数中声明了
    m[][]
    p[][]
    但没有初始化它,因此它将被垃圾值填满
  • 您可以使用
    printf(“%u%u”)
    打印答案,但该问题要求每个输出都有一行新行,因此这里应该是
    printf(“%u%u\n”)
  • 在我改变了你程序中的这4个“bug”之后,它被接受了:)所以你的算法逻辑被批准了,但是一些“不相关”的东西阻止了你被接受不要小看这些“细节”,它们很重要