40分蒟蒻求助

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

BQianYi @ 2023-08-02 19:28:48

#include<bits/stdc++.h>
using namespace std;
struct thi
{
    int v[3];
    int p[3];
    int cnt;//计数,存到第几个附件
}th[65];
int n,m;
long long dp[32005];
int main()
{
    int a,b,c;
    //shuru
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        cin>>a>>b>>c;
        //第i件物品的价格、重要度以及它对应的的主件
        if(c!=0)
        {
            th[c].v[++th[c].cnt]=a;
            th[c].p[th[c].cnt]=b;
        }
        else
        {
            th[i].v[0]=a;
            th[i].p[0]=b;
        }
    }
    //chuli
    for(int i=1;i<=m;i++)
    for(int j=n;j>=th[i].v[0];j-=10)
    {
        if(dp[j-th[i].v[0]]+th[i].v[0]*th[i].p[0]>dp[j])
        {
            dp[j]=dp[j-th[i].v[0]]+th[i].v[0]*th[i].p[0];
                if(th[i].v[0]+th[i].v[1]<=j&&dp[j-th[i].v[0]-th[i].v[1]]+th[i].v[1]*th[i].p[1]+th[i].v[0]*th[i].p[0]>dp[j])
                    dp[j]=dp[j-th[i].v[0]-th[i].v[1]]+th[i].v[1]*th[i].p[1]+th[i].v[0]*th[i].p[0];
                if(th[i].v[0]+th[i].v[2]<=j&&dp[j-th[i].v[0]-th[i].v[2]]+th[i].v[2]*th[i].p[2]+th[i].v[0]*th[i].p[0]>dp[j])
                    dp[j]=dp[j-th[i].v[0]-th[i].v[2]]+th[i].v[2]*th[i].p[2]+th[i].v[0]*th[i].p[0];
                if(th[i].v[0]+th[i].v[1]+th[i].v[2]<=j&&dp[j-th[i].v[1]-th[i].v[2]]+th[i].v[1]*th[i].p[1]+th[i].v[2]*th[i].p[2]+th[i].v[0]*th[i].p[0]>dp[j])
                    dp[j]=dp[j-th[i].v[0]-th[i].v[1]-th[i].v[2]]+th[i].v[1]*th[i].p[1]+th[i].v[2]*th[i].p[2]+th[i].v[0]*th[i].p[0];
        }
        else dp[j]=dp[j]; 
    }
    //shuchu
    cout<<dp[n];
    return 0;
}

by BQianYi @ 2023-08-02 19:31:29

从第五个点往后就都错了 请问哪里出了问题?Thanks♪(・ω・)ノ


|