Maxmilite @ 2020-10-17 08:08:16
(万里红中一点绿)
#include <bits/stdc++.h>
using namespace std;
#define regint register int
#define opt tie(0)
#define maxv 30
#define maxg 20
int v, g, ans(114514);
int stdd[maxv], nowd[maxg][maxv];
int vis[maxg], cpy[maxg];
void dfs(int x, int cnt, ------>int mk[]<-------)
{
if (x > g)
return;
cnt++;
vis[x] = 1;
for(int i = 1;i <= v;++i)
mk[i] += nowd[x][i];
int mark = 1;
for(int i = 1;i <= v;++i)
if(mk[i] < stdd[i])
{
mark = 0;
for(int i = 1;i <= g - x;++i)
dfs(x + i,cnt,mk);
break;
}
if(cnt < ans && mark)
{
for(int i = 1;i <= g;++i)
cpy[i] = vis[i];
ans = cnt;
}
for(int i = 1;i <= v;++i)
mk[i] -= nowd[x][i];
vis[x] = 0;
return;
}
int main()
{
ios::sync_with_stdio(false);
cin.opt;
cout.opt;
cin >> v;
for (int i(1); i <= v; ++i)
cin >> stdd[i];
cin >> g;
for (int i(1); i <= g; ++i)
for (int j(1); j <= v; ++j)
cin >> nowd[i][j];
------>int nowp[maxg] = {0}<-------;
for(int i = 1;i <= g;++i)
dfs(i, 0, ------>nowp<-------);
cout << ans << ' ';
for (int i(1); i <= g; ++i)
if (cpy[i])
cout << i << ' ';
cout << endl;
return 0;
}
做题时想到了用一个数组来记录当前使用饲料后奶牛的维生素含量,于是想到了直接在dfs中引用一个数组指针
于是在某种不明确的情况下(貌似发生了内存泄露
出现了开头图所示的情况
错误点主要在第二个测试点
Wrong Answer. wrong answer On line 1 column 4, read 1, expected 2.
(当时的我:????? (本地测试第二个测试点与标准答案一致)
(然而洛谷评测机第一种饲料读到了1)
把记录含量的数组直接开成全局的就行了
#include <bits/stdc++.h>
using namespace std;
#define regint register int
#define opt tie(0)
#define maxv 30
#define maxg 20
int v, g, ans(114514);
int stdd[maxv], nowd[maxg][maxv];
int vis[maxg], cpy[maxg], mk[maxg];
void dfs(int x, int cnt)
{
if (x > g)
return;
cnt++;
vis[x] = 1;
for (int i = 1; i <= v; ++i)
mk[i] += nowd[x][i];
int mark = 1;
for (int i = 1; i <= v; ++i)
if (mk[i] < stdd[i])
{
mark = 0;
for (int i = 1; i <= g - x; ++i)
dfs(x + i, cnt);
break;
}
if (cnt < ans && mark)
{
for (int i = 1; i <= g; ++i)
cpy[i] = vis[i];
ans = cnt;
}
for (int i = 1; i <= v; ++i)
mk[i] -= nowd[x][i];
vis[x] = 0;
return;
}
int main()
{
ios::sync_with_stdio(false);
cin.opt;
cout.opt;
cin >> v;
for (int i(1); i <= v; ++i)
cin >> stdd[i];
cin >> g;
for (int i(1); i <= g; ++i)
for (int j(1); j <= v; ++j)
cin >> nowd[i][j];
for (int i = 1; i <= g; ++i)
dfs(i, 0);
cout << ans << ' ';
for (int i(1); i <= g; ++i)
if (cpy[i])
cout << i << ' ';
cout << endl;
return 0;
}
就这么个破点我调了六分钟....
朋友们 千万不能乱用指针
by Maxmilite @ 2020-10-17 09:03:06
@duyi
好的谢谢大佬
by Maxmilite @ 2020-10-17 09:04:15
@JacderZhang
谢谢大佬
by pocafup @ 2020-10-17 09:08:56
我猪国杀因为一个小问题调了六个小时