oscar123 @ 2016-11-12 20:22:54
请问这种问题会不会可能影响NOIP考试,请问神犇们我有没有犯什么被高版本编译器容错的问题,谢谢
#include <iostream>
#include <cstdio>
using namespace std;
bool is[32001][61][61];
int f[32001][61];
struct item{
int v,p,q;
}a[700];
int main()
{
int n=0,m=0;
//freopen("1.txt","r",stdin);
cin>>m>>n;
for (int i=1;i<=n;i++)
cin>>a[i].v>>a[i].p>>a[i].q;
for (int i=1;i<=n;i++)
{
for (int j=m;j>=0;j--)
{
if (is[j][i-1][a[i].q]==true || a[i].q==0 && j+a[i].v<=m)
{
if (f[j+a[i].v][i]<f[j][i-1]+a[i].v*a[i].p)
{
f[j+a[i].v][i]=f[j][i-1]+a[i].v*a[i].p;
for (int k=1;k<=i-1;k++)
{
is[j+a[i].v][i][k]=is[j][i-1][k];
}
is[j+a[i].v][i][i]=true;
}
}
else if (j+a[i].v+a[a[i].q].v<=m)
{
if (f[j+a[i].v+a[a[i].q].v][i]<f[j][i-1]+a[i].v*a[i].p+a[a[i].q].v*a[a[i].q].p)
{
f[j+a[i].v+a[a[i].q].v][i]=f[j][i-1]+a[i].v*a[i].p+a[a[i].q].v*a[a[i].q].p;
for (int k=1;k<=i-1;k++)
{
is[j+a[i].v+a[a[i].q].v][i][k]=is[j][i-1][k];
}
is[j+a[i].v+a[a[i].q].v][i][i]=true;
is[j+a[i].v+a[a[i].q].v][i][a[i].q]=true;
}
}
if (f[j][i]<f[j][i-1])
{
f[j][i]=f[j][i-1];
for (int k=1;k<=i-1;k++)
is[j][i][k]=is[j][i-1][k];
}
}
}
int answer=0;
for (int i=1;i<=m;i++)
answer=max(f[i][n],answer);
cout<<answer;
}
by DSrush @ 2016-11-12 20:44:12
你的return 0;去哪里了
by deoplljj @ 2016-11-12 20:58:47
楼上正解。没有return 0 NOIP也过不了的
by oscar123 @ 2016-11-12 21:02:10
还是不过啊,ps:我考去年NOIP不加return 0也能过的啊,我在洛谷上测其他题也是行的啊
by 浮生若梦丶 @ 2016-11-13 19:20:16
洛谷好像禁止在for循环中直接定义循环变量来使用。
楼主试下把for (int i=1;i<=m;i++)的int i提出来单独写,不影响noip的。
by Just_do_it @ 2016-11-15 08:15:47
for循环中直接定义是可以的,只要你选的是c++语言。(不要用自动识别语言……)
by yyd0928 @ 2017-01-03 12:10:35
我也一样
by cstdio @ 2017-02-09 10:26:02
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈