usaco 4.2.3 jop prossing 一道贪心题,我的代码如下:
/*
ID:help....
LANG:C++
TASK:job
*/
#include <cstdio>
#include <cstring>
const int maxn = 3000 + 5; //题意只要开到 30 就够了,开300只过到#7,开3000才ac,数组开在一起,导致空间重叠??
int t[2][maxn],delay[2][maxn],cost[2][maxn],n,ans;
int main()
{
freopen("job.in","r",stdin);
freopen("job.out","w",stdout);
scanf("%d %d %d\n",&n,&t[0][0],&t[1][0]);
for(int k=0;k<=1;++k)
for(int i=1;i<=t[k][0];++i)
scanf("%d",&t[k][i]);
for(int k=0;k<=1;++k)
for(int i=1;i<=n;++i)
{
int minv=0x3f3f3f3f,pos;
for(int j=1;j<=t[k][0];++j)
if(t[k][j]+delay[k][j]<minv)
{
minv=t[k][j]+delay[k][j];
pos=j;
}
delay[k][pos]=cost[k][i]=minv;
}
for(int i=1;i<=n;++i)
if(ans<cost[0][i]+cost[1][n-i+1])
ans=cost[0][i]+cost[1][n-i+1];
printf("%d %d\n",cost[0][n],ans);
return 0;
}
如题,为什么会发生这种情况,或者说我代码有问题。。。求指点。无限困惑中。。。
/*
ID:help....
LANG:C++
TASK:job
*/
#include <cstdio>
#include <cstring>
const int maxn = 3000 + 5; //题意只要开到 30 就够了,开300只过到#7,开3000才ac,数组开在一起,导致空间重叠??
int t[2][maxn],delay[2][maxn],cost[2][maxn],n,ans;
int main()
{
freopen("job.in","r",stdin);
freopen("job.out","w",stdout);
scanf("%d %d %d\n",&n,&t[0][0],&t[1][0]);
for(int k=0;k<=1;++k)
for(int i=1;i<=t[k][0];++i)
scanf("%d",&t[k][i]);
for(int k=0;k<=1;++k)
for(int i=1;i<=n;++i)
{
int minv=0x3f3f3f3f,pos;
for(int j=1;j<=t[k][0];++j)
if(t[k][j]+delay[k][j]<minv)
{
minv=t[k][j]+delay[k][j];
pos=j;
}
delay[k][pos]=cost[k][i]=minv;
}
for(int i=1;i<=n;++i)
if(ans<cost[0][i]+cost[1][n-i+1])
ans=cost[0][i]+cost[1][n-i+1];
printf("%d %d\n",cost[0][n],ans);
return 0;
}
如题,为什么会发生这种情况,或者说我代码有问题。。。求指点。无限困惑中。。。