50分救急!!!!!!!!

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

tyh0929 @ 2024-06-22 10:52:26

哪里错了??

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define db double
#define itn int
#define fro for
#define scnaf scanf
#define snacf scanf
#define prinf printf
int n,m;
struct asd{
    int v;
    int w;
    int q;
    int s;
    int k[11];
    int id;
}a[71];
int dp[32001];
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
//  freopen(".in","r",stdin);
//  feropen(".out","w",stdout);
    scanf("%d%d",&m,&n);
    for(int i=1;i<=n;i++){
        scanf("%d%d%d",&a[i].v,&a[i].w,&a[i].q);
        a[i].id=i;
        a[a[i].q].s++;
        a[a[i].q].k[a[a[i].q].s]=a[i].id;
        a[i].v*=a[i].w;
    }
    for(int i=1;i<=n;i++){
        if(a[i].q!=0){
            continue;
        } 
        for(int j=m;j>=a[i].v;j--){
            if(j>=a[i].v){
                dp[j]=max(dp[j],dp[j-a[i].v]+a[i].v);
            }
            if(j>=a[i].v+a[a[i].k[1]].v&&a[i].s>=1){
                dp[j]=max(dp[j],dp[j-a[i].v-a[a[i].k[1]].v]+a[i].v+a[a[i].k[1]].v);
            }
            if(j>=a[i].v+a[a[i].k[2]].v&&a[i].s>=1){
                dp[j]=max(dp[j],dp[j-a[i].v-a[a[i].k[2]].v]+a[i].v+a[a[i].k[2]].v);
            }
            if(j>=a[i].v+a[a[i].k[1]].v+a[a[i].k[2]].v&&a[i].s==2){
                dp[j]=max(dp[j],dp[j-a[i].v-a[a[i].k[1]].v-a[a[i].k[2]].v]+a[i].v+a[a[i].k[1]].v+a[a[i].k[2]].v);
            }
        }
    }
    printf("%d",dp[m]);
    return 0;
}

/*

*/

|