蒟蒻90分求助,第六个点卡了

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

不AC就吃__ @ 2020-08-07 19:18:49

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int w[61][3],c[61][3],f[32001],k[61];
int main()
{
    int m,n,num=0;
    cin>>m>>n;
    for(int i=1;i<=n;i++)
    {
        int w1,c1,ms;
        cin>>w1>>c1>>ms;
        if(ms!=0)
        {
            w[ms][++k[ms]]=w1;
            c[ms][k[ms]]=w1*c1;
        }
        else
        {
            w[i][0]=w1;
            c[i][0]=w1*c1;
        }
    }
    /*
    for(int i=1;i<=n;i++)
    {
        cout<<w[i][0]<<" "<<w[i][1]<<" "<<w[i][2]<<endl;
        cout<<c[i][0]<<" "<<c[i][1]<<" "<<c[i][2]<<endl;
        cout<<endl;
    }
    */
    //输入部分完成
    //决策有不选,选主件,选主件+附件1,选主件+附件2,选主件+附件1+附件2
    for(int i=1;i<=n;i++)
    for(int v=m;v>=w[i][0];v--)
    {
        if(k==0)//这里没写下标也不知道其他点怎么过的,改了下标第六个点也没过QAQ
        f[v]=max(f[v],f[v-w[i][0]]+c[i][0]);//不选和选主件
        else 
        {
            if(v>=w[i][0]+w[i][1])
            f[v]=max(f[v],f[v-w[i][0]-w[i][1]]+c[i][0]+c[i][1]);
            if(v>=w[i][0]+w[i][2])
            f[v]=max(f[v],f[v-w[i][0]-w[i][2]]+c[i][0]+c[i][2]);
            if(v>=w[i][0]+w[i][1]+w[i][2])
            f[v]=max(f[v],f[v-w[i][0]-w[i][1]-w[i][2]]+c[i][0]+c[i][1]+c[i][2]);
        }
    }
    cout<<f[m];
    return 0;
}

by 不AC就吃__ @ 2020-08-07 19:25:37

洛谷数据和添柴是一样的

第六个点输出是36400

我按第六个点的输入是35600


by lzh009 @ 2023-08-05 15:58:43

@不AC就吃__

你可以下载一下数据,然后根据数据判断,是第六点就直接输出第六点的答案,不是的话再进行计算

(如果你特别看重分数的话可以这样蹭分,但是我不建议这样做——

话说我是看到你的名字才这样提的建议

(我也不大会,写了半天结果全RE


|