我正在创建一个程序,它仅使用 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) 我一直在尝试创建一个优先级队列,其中每个元素都是一对存储指向unsigned int和unsigned 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)