小编Jus*_*bie的帖子

优化递归函数

我正在创建一个程序,它仅使用 1、2、6 和 13 返回获得数字 (n) 所需的最少总和。它非常适合 n 的小值,但一旦 n 达到像 200 这样的值程序花费太多时间来计算结果。

因此,我有两个问题:

1.有没有办法让递归更快?

2.我应该避免使用递归并使用循环吗?

这是注释的代码:

#include <iostream>
#define MAX 500000

using namespace std;

void cal(int inp, int &mini, int counter = 0);

int main (void)
{
    //Gets input
    int n;
    cin >> n;

    //Defines mini as the MAX result we can get
    int mini = MAX;

    //Calls the function
    cal(n, mini);

    //Prints the best result
    cout << mini << endl;

    return 0;
}

void cal(int inp, …
Run Code Online (Sandbox Code Playgroud)

c++ optimization recursion function

2
推荐指数
1
解决办法
1349
查看次数

优先级队列更改其内容

我一直在尝试创建一个优先级队列,其中每个元素都是一存储指向unsigned intunsigned int指针.问题是每当我向优先级队列添加一对时,先前添加的对指向的元素将其值切换为0.

这是代码

#include <iostream>
#include <vector>
#include <utility>
#include <queue>

typedef unsigned int ui;
typedef std::pair<ui*, ui> Ppuiui;
typedef std::priority_queue<Ppuiui> Queue;

void showPQ(Queue Q)
{
    while(!Q.empty())
    {
        std::cout << *(Q.top().first) << " -> " << Q.top().second << std::endl;
        Q.pop();
    }
    std::cout << std::endl;
}

int main(void)
{
    std::vector<ui> distance;
    Queue Q;

    //Adding elements to the priority queue while showing them
    distance.push_back(2500);
    Q.push(Ppuiui(&(distance[0]), 0));
    showPQ(Q);

    distance.push_back(1000);
    Q.push(Ppuiui(&(distance[1]), 1));
    showPQ(Q); …
Run Code Online (Sandbox Code Playgroud)

c++ pointers priority-queue std-pair

1
推荐指数
1
解决办法
172
查看次数