1.为什么数组开大在c++14编译错误,在c++11就对了 2.在本地测的时候样例一直是输出1000,洛谷上交样例就对了,本来N=1e4,调大了之后分数就高了---
以下是ac代码
#include<bits/stdc++.h>
using namespace std;
const int N=32010;
int val[N],cost[N],follow[N][2],fans[N],f[N][N],n,m;
bool king[N];
int work()
{
int p=0;
for(int i=1;i<=m;i++)
{
if(king[i])
{
for(int j=0;j<=n;j++)
{
f[i][j]=f[p][j];
if(j-cost[i]>=0)
f[i][j]=max(f[i][j],f[p][j-cost[i]]+val[i]);
int fan1=fans[i]>=1?follow[i][0]:-1;
int fan2=fans[i]>=2?follow[i][1]:-1;
if(fan1!=-1&&j-cost[i]-cost[fan1]>=0)
f[i][j]=max(f[i][j],f[p][j-cost[i]-cost[fan1]]+val[i]+val[fan1]);
if(fan2!=-1&&j-cost[i]-cost[fan2]>=0)
f[i][j]=max(f[i][j],f[p][j-cost[i]-cost[fan2]]+val[i]+val[fan2]);
if(fan1!=-1 && fan2 != -1&&j-cost[i]-cost[fan2]-cost[fan1]>=0)
f[i][j]=max(f[i][j],f[p][j-cost[i]-cost[fan2]-cost[fan1]]+val[i]+val[fan2]+val[fan1]);
}
p=i;
}
}
return f[p][n];
}
int main()
{
cin>>n>>m;
int v,p,q;
for(int i=1;i<=m;i++)
{
cin>>v>>p>>q;
cost[i]=v;
val[i]=v*p;
if(!q)
{
king[i]=1;
}else
{
follow[q][fans[q]++]=i;
}
}
cout<<work();
return 0;
}
![用c++14]
(https://www.luogu.com.cn/record/227390059)