UntilR @ 2019-11-03 18:49:43
因部分代码较长,建议复制粘贴后再看。
#include <iostream>
using namespace std;
long long f[32001];
struct as{
int a[4];
int b[4];
}aa[61];
int main()
{
int n,m;
cin>>m>>n;
for(int i=1;i<=n;i++)
{
int z,x,c;
cin>>z>>x>>c;
if(c!=0)
{
if(aa[c].a[2]!=0)
{
aa[c].a[3]=z;
aa[c].b[3]=x;
i--;n--;
}
else
{
aa[c].a[2]=z;
aa[c].b[2]=x;
i--;n--;
}
}
else
{
aa[i].a[1]=z;
aa[i].b[1]=x;
}
}
for(int i=1;i<=n;i++)
for(int j=m;j>=aa[i].a[1];j--)
{
f[j]=max(f[j],f[j-aa[i].a[1]]+aa[i].a[1]*aa[i].b[1]);
if(j>=aa[i].a[1]+aa[i].a[2])
f[j]=max(f[j],f[j-aa[i].a[1]-aa[i].a[2]]+aa[i].a[1]*aa[i].b[1]+aa[i].a[2]*aa[i].b[2]);
if(j>=aa[i].a[1]+aa[i].a[3])
f[j]=max(f[j],f[j-aa[i].a[1]-aa[i].a[3]]+aa[i].a[1]*aa[i].b[1]+aa[i].a[3]*aa[i].b[3]);
if(j>=aa[i].a[1]+aa[i].a[2]+aa[i].a[3])
f[j]=max(f[j],f[j-aa[i].a[1]-aa[i].a[2]-aa[i].a[3]]+aa[i].a[1]*aa[i].b[1]+aa[i].a[2]*aa[i].b[2]+aa[i].a[3]*aa[i].b[3]);
}
cout<<f[m];
return 0;
}
by Meatherm @ 2019-11-03 18:54:18
您这个代码高亮看着有点不舒服啊...让我重新发一遍再来看看
#include <iostream>
using namespace std;
long long f[32001];
struct as{
int a[4];
int b[4];
}aa[61];
int main()
{
int n,m;
cin>>m>>n;
for(int i=1;i<=n;i++)
{
int z,x,c;
cin>>z>>x>>c;
if(c!=0)
{
if(aa[c].a[2]!=0)
{
aa[c].a[3]=z;
aa[c].b[3]=x;
i--;n--;
}
else
{
aa[c].a[2]=z;
aa[c].b[2]=x;
i--;n--;
}
}
else
{
aa[i].a[1]=z;
aa[i].b[1]=x;
}
}
for(int i=1;i<=n;i++)
for(int j=m;j>=aa[i].a[1];j--)
{
f[j]=max(f[j],f[j-aa[i].a[1]]+aa[i].a[1]*aa[i].b[1]);
if(j>=aa[i].a[1]+aa[i].a[2])
f[j]=max(f[j],f[j-aa[i].a[1]-aa[i].a[2]]+aa[i].a[1]*aa[i].b[1]+aa[i].a[2]*aa[i].b[2]);
if(j>=aa[i].a[1]+aa[i].a[3])
f[j]=max(f[j],f[j-aa[i].a[1]-aa[i].a[3]]+aa[i].a[1]*aa[i].b[1]+aa[i].a[3]*aa[i].b[3]);
if(j>=aa[i].a[1]+aa[i].a[2]+aa[i].a[3])
f[j]=max(f[j],f[j-aa[i].a[1]-aa[i].a[2]-aa[i].a[3]]+aa[i].a[1]*aa[i].b[1]+aa[i].a[2]*aa[i].b[2]+aa[i].a[3]*aa[i].b[3]);
}
cout<<f[m];
return 0;
}
by Maxrage @ 2019-11-03 18:57:00
#include <iostream>
部分代码
与
#include <iostream>
插入代码
的区别