所以我正在研究这个Codeforces problem并编写了一个程序来解决它,但它没有打印正确的答案所以我决定尝试调试它。下面附有代码:
#include <iostream>
using namespace std;
int maxof(int a[], int m)
{
int x = a[0];
for (int i = 1; i < m; i++)
if (x < a[i])
x = a[i];
return x;
}
int maxind(int a[], int m)
{
int x = maxof(a,m);
int n = 0;
while (a[n] != x)
n++;
return n;
}
...
int maxcost(int a[], int n, int m)
{
int x = 0;
for (int i = 0; i < n; i++) {
/*
for (int j = 0; j < m; j++)
cout << a[j] << " ";
cout << endl;
*/
x += maxof(a,m);
a[maxind(a,m)]--;
}
return x;
}
...
int main()
{
int n,m;
cin >> n >> m;
int a[m];
for (int i = 0; i < m; i++)
cin >> a[i];
/*
for (int i = 0; i < m; i++)
cout << a[i] << " ";
cout << endl;
*/
cout << maxcost(a,n,m) << " " << mincost(a,n,m);
}
因此,如果我取出/ * * /块并使用输入
运行程序4 3
2 1 1
它应该打印出来:
2 1 1
2 1 1
1 1 1
0 1 1
0 0 1
0 0 0
5 5
但它打印出来了:
2 1 1
2 -3 1
1 -3 1
0 -3 1
0 -3 0
4 4
这个随机-3来自哪里,我该如何解决这个问题?
答案 0 :(得分:6)
在maxcost
和mincost
maxcost
修改a
,因此我认为mincost
也是如此。
在您的情况下,首先计算mincost
,因此maxcost
会将修改后的a
作为输入。
在致电前或a
内克隆maxValueCost
(同样适用于minValueCost
)。
或确保maxcost
和mincost
不会更改a
。
答案 1 :(得分:1)
a[maxind(a,m)]--;
你的问题在于这一行。你在代码中减少任何值的唯一地方就在这里。
在这里设置一个断点,你会看到发生了什么。