以下C ++代码在编译时会出现错误:
#include <bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define endl "\n"
const int N = 5005;
int n, k;
int a[N], prev[N];
int cache[N][N];
int dp(int idx, int take)
{
if(take < 0)
return -1e9;
if(idx == 0)
return 0;
int &ans = cache[idx][take];
if(ans != -1)
return ans;
ans = dp(idx - 1, take);
ans = max(ans, idx - prev[idx] + dp(prev[idx], take - 1));
return ans;
}
int32_t main()
{
IOS;
memset(cache, -1, sizeof(cache));
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1, a+n+1);
int l = 1;
for(int r=1;r<=n;r++)
{
while(a[r] - a[l] > 5)
l++;
prev[r] = l - 1;
}
int ans = dp(n, k);
cout<<ans;
return 0;
}
//AshishGup
调用失败[COMPILATION_ERROR]无法编译文件:program.cpp:
在函数'int dp(int,int)'中:program.cpp:23:23:错误:对 “上一个”不明确
ans = max(ans,idx-上一个 [idx] + dp(上一个 [idx], 取-1));
,但是只要数组名称从上一个更改为上一个,它就可以正常工作。发生什么事了?
答案 0 :(得分:4)
using namespace std;
这样做a bad idea,这就是原因。变量prev
与标准库函数std::prev
之间存在歧义。
此外,您还应该not #include
internal compiler headers,例如bits/stdc++.h
。
答案 1 :(得分:1)
避免将prev
名称空间导入全局名称空间。在您的情况下,您导入了std名称空间,并定义了一个名为std::prev
的全局变量,该变量现在将与迭代器中定义的{{1}}冲突。 https://en.cppreference.com/w/cpp/iterator/prev