c++ - 使用自定义结构将结果存储在 C++ 中的映射中
问题描述
我正在使用以下程序使用递归解决动态编程问题
#include <iostream>
#include <cmath>
#include <map>
#include <limits.h>
using namespace std;
int getMax(int a[], int start, int end){
int i,m=0;
for(i=start;i<end;i++){
if(a[i]>m){
m = a[i];
}
}
return m;
}
int getanswer(int a[], int k,int prevstart, int start, int end, int total){
if(start == end && k!=0){
return INT_MAX;
}
else if(k == 1){
return total + getMax(a,start,end);
}
return min(getanswer(a,k-1,start+1,start+1,end,total+getMax(a,prevstart,start+1)), getanswer(a,k,prevstart,start+1,end,total));
}
int main() {
int a[] = {74303,20452,66120,44483,5370,68585};
int k = 5;
cout<<getanswer(a,k,0,0,6,0);
return 0;
}
它给出 234830 作为正确的输出。现在,我正在创建一个自定义结构并使用映射来存储结果。
#include <iostream>
#include <cmath>
#include <map>
#include <limits.h>
using namespace std;
struct Test {
int k;
int prevstart;
int start;
int end;
};
bool operator<(const Test& t1, const Test& t2)
{
return (t1.k < t2.k) || (t1.k == t2.k && t1.prevstart < t2.prevstart) ||
(t1.k == t2.k && t1.prevstart == t2.prevstart && t1.start < t2.start) ||
(t1.k == t2.k && t1.prevstart == t2.prevstart && t1.start == t2.start && t1.end < t2.end);
}
map<Test,int> dp;
int getMax(int a[], int start, int end){
int i,m=0;
for(i=start;i<end;i++){
if(a[i]>m){
m = a[i];
}
}
return m;
}
int getanswer(int a[], int k,int prevstart, int start, int end, int total){
Test temp = {k,prevstart,start,end};
if(dp.count(temp)){
return dp[temp];
}
if(start == end && k!=0){
return INT_MAX;
}
else if(k == 1){
dp[temp] = total + getMax(a,start,end);
return dp[temp];
}
dp[temp] = min(getanswer(a,k-1,start+1,start+1,end,total+getMax(a,prevstart,start+1)), getanswer(a,k,prevstart,start+1,end,total));
return dp[temp];
}
int main() {
int a[] = {74303,20452,66120,44483,5370,68585};
int k = 5;
cout<<getanswer(a,k,0,0,6,0);
return 0;
}
但是,现在它给出了 258861 作为输出。我怀疑我在重载 < 运算符时做错了什么。我在这里想念什么?
解决方案
在第一个程序中,getanswer
有时调用 , 的值相同,但k
的值不同。因此它当然会返回不同的结果。prevstart
start
end
total
在第二个程序中,自然有时也会使用、和getanswer
的相同值调用 is k
,但. 但是,它从这些调用返回相同的结果 - 即,第一个此类调用计算并存储在映射中的结果。prevstart
start
end
total
推荐阅读
- .htaccess - Htaccess,重定向某些域
- google-apps-script - 保存为带有图像和横向的 PDF
- rust - 为什么 Command.output() 执行有时会为 status.code() 返回 None
- ios - NativeScript Sidekick Publishing IOS 不断提示输入密码
- laravel - Laravel - 使用 created_at 页面排序进行分页
- windows - 使用文档中的 cro 命令行工具时遇到问题
- ionic-framework - Programmatically scroll ion-segment
- c# - How to remove part of a path and start from a certain part
- vba - “编译错误:预期:列表分隔符或)”
- reactjs - React Router: How to match indeterminate amount of sub paths of a nested route?