一样的代码,在vijos上面wa 到洛谷code vs 上面AC了

#include<cstdio>
#include<iostream>
#include<cstring>
struct goods{
long v,p,x;
};
goods pack[70][10];
long dp[70][33000];
int count[70],s[70];
int main()
{
memset(s,0,sizeof(s));
memset(count,0,sizeof(count));
memset(dp,0,sizeof(dp));
int v,m,l;
long x,y,cou(1),cou1(0);
scanf("%d%d",&v,&m);
for(int i=0;i<m;i++)
{
scanf("%ld%ld%d",&x,&y,&l);
cou1++;
if(l==0)
{
s[cou1]=cou;
pack[cou][count[cou]].v=x;
pack[cou][count[cou++]].p=y;
}else{
count[s[l]]++;
pack[s[l]][count[s[l]]].v=x;
pack[s[l]][count[s[l]]].p=y;}}
for(int i=1;i<cou;i++)
{
pack[i][0].x=pack[i][0].v*pack[i][0].p;
if(count[i]==1)
{
pack[i][1].x=pack[i][0].x+pack[i][1].p*pack[i][1].v;
pack[i][1].v+=pack[i][0].v;
}
else if(count[i]==2){
pack[i][3].x=pack[i][0].x;
for(int j=1;j<3;j++)
{
pack[i][j].x=pack[i][j].v*pack[i][j].p;
pack[i][3].x+=pack[i][j].x;
pack[i][j].x+=pack[i][0].x;
pack[i][j].v+=pack[i][0].v;
}
pack[i][3].v=pack[i][1].v+pack[i][2].v-pack[i][0].v;
count[i]++;
}
}
for(int i=1;i<cou;i++)
for(int k=0;k<=count[i];k++)
for(int j=0;j<=v;j++)
{
if(j-pack[i][k].v>=0)
dp[i][j]=std::max(dp[i][j],dp[i-1][j-pack[i][k].v]+pack[i][k].x);
dp[i][j]=std::max(dp[i][j],dp[i-1][j]);
}
printf("%ld\n",dp[cou-1][v]);
return 0;
}
然后还厚颜无耻的拿了一下题解的c++代码试了下,打表的那个过了,但是2L那位的就WA了

2 条评论

  • @ 2015-10-20 12:53:58

    在把26行那个变量自增拖出来就AC了==

  • @ 2015-10-20 06:30:21

    你的代码中存在大量不规范的c++使用,包括long,ld等,vijos所用编译环境和编译命令是noi所要求的,你的代码在这种规定下是无法正确的,无论是在本地还是在vijos。

    你所提交的题解中的代码是含有freopen的,当然不可能正确。

    • @ 2015-10-20 12:54:22

      在把26行那个变量自增拖出来就AC了==,话说c++中long的规范使用是?

    • @ 2015-10-20 16:47:26

      至少在oi比赛中,c++建议不要用long,32位整数用int,64位用long long,输出前者%d,后者在win系统下用%I64d,在ubuntu下用%lld。

    • @ 2015-10-20 18:34:29

      谢谢!!!!!受教了

  • 1

信息

ID
1313
难度
6
分类
动态规划 | 背包 点击显示
标签
递交数
8324
已通过
2464
通过率
30%
被复制
20
上传者