救救孩子,孩子脑不好!!!

P1064 [NOIP2006 提高组] 金明的预算方案

UntilR @ 2019-11-03 18:49:43

有哪位大佬帮我康康我的代码,蟹蟹。四个点WA,六个核桃都治不好。

因部分代码较长,建议复制粘贴后再看。

#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>
插入代码

的区别


|