写了半天,结果全RE

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

lzh009 @ 2023-08-05 15:39:38

下面是代码,说实话,感觉有点打表的样子……

#include<bits/stdc++.h>
#define N 40000

using namespace std;

int f[N],v[65][4],p[65][4];
int m,n,mon,l,w;
int main(){
    cin>>m>>n;
    for(int i=1;i<=n;i++){
        cin>>mon>>l>>w;
        if(w==0){
            v[i][0]=mon;
            p[i][0]=l;
        }else{
            if(v[w][1]==0){
                v[i][1]=mon;
                p[i][1]=l;
            }
            else{
                v[i][2]=mon;
                v[i][2]=l;
            }
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=m;j>=0;j++){
            int vp[3];
            vp[1]=v[i][0]*p[i][0];
            vp[2]=v[i][1]*p[i][1];
            vp[3]=v[i][2]*p[i][2];
            if(f[j]>=v[i][0]) f[j]=max(f[j],f[j-v[i][0]]+vp[1]);
            if(f[j]>=(v[i][0]+v[i][1])) f[j]=max(f[j],f[j-v[i][0]-v[i][1]]+vp[1]+vp[2]);
            if(f[j]>=(v[i][0]+v[i][1]+v[i][2])) f[j]=max(f[j],f[j-v[i][0]-v[i][1]-v[i][2]]+vp[1]+vp[2]+vp[3]);
        }
    }
    cout<<f[n]<<endl;
    return 0;
}

by Flechazo_07 @ 2023-08-06 21:24:49

动态规划那个循环里面,第二个循环,j++???


by Sity_Hugh @ 2023-09-05 21:39:27

@shy515864 正确的,导致了死循环(话说不在本地调逝 一下的么)


|