求dalao看看我哪里不对啊

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

月离 @ 2019-02-16 10:11:34

如题```cpp

include<iostream>

include<cstring>

using namespace std; int n,m; int c[100000][5]; int w[100000][5]; int ans=0; int f[100000]; int main(){ cin>>m>>n; for(int i=1;i<=n;i++){ int ww,cc,pp; cin>>ww>>cc>>pp; if(pp==0){ c[i][0]=cc; w[i][0]=ww; c[i][0]=w[i][0]c[i][0]; } if(pp!=0){ if(w[pp][1]==0){ c[pp][1]=cc; w[pp][1]=ww; c[i][1]=w[i][1]c[i][1]; } else{ c[pp][2]=cc; w[pp][2]=ww; c[i][2]=w[i][2]*c[i][2]; } } } for(int i=1;i<=n;i++){ for(int j=m;j>=0;j--){ if(j>=w[i][0]&&j<=w[i][0]+w[i][1]||j<=w[i][0]+w[i][2]){ f[i]=max(f[i],f[j-w[i][0]]+c[i][0]); } if(j>=w[i][0]+w[i][1]&&j<=w[i][0]+w[i][1]+w[i][2]){ f[i]=max(f[i],f[j-w[i][0]-w[i][1]]+c[i][0]+c[i][1]); } if(j>=w[i][0]+w[i][2]&&j<=w[i][0]+w[i][1]+w[i][2]){ f[i]=max(f[i],f[j-w[i][0]-w[i][2]]+c[i][0]+c[i][2]); } if(j>=w[i][0]+w[i][1]+w[i][2]){ f[i]=max(f[i],f[j-w[i][0]-w[i][1]-w[i][2]]+c[i][0]+c[i][1]+c[i][2]); } } } cout<<f[m];

return 0;

}


by wwlw @ 2019-02-16 10:12:55

希望更丰富的展现?使用Markdown


by 月离 @ 2019-02-16 10:13:02

#include<iostream>
#include<cstring>
using namespace std;
int n,m;
int c[100000][5];
int w[100000][5];
int ans=0;
int f[100000];
int main(){
    cin>>m>>n;
    for(int i=1;i<=n;i++){
        int ww,cc,pp;
        cin>>ww>>cc>>pp;
        if(pp==0){
            c[i][0]=cc;
            w[i][0]=ww;
            c[i][0]=w[i][0]*c[i][0];
        }
        if(pp!=0){
            if(w[pp][1]==0){
                c[pp][1]=cc;
                w[pp][1]=ww;
                c[i][1]=w[i][1]*c[i][1];
            }
            else{
                c[pp][2]=cc;
                w[pp][2]=ww;
                c[i][2]=w[i][2]*c[i][2];
            }
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=m;j>=0;j--){
            if(j>=w[i][0]&&j<=w[i][0]+w[i][1]||j<=w[i][0]+w[i][2]){
                f[i]=max(f[i],f[j-w[i][0]]+c[i][0]);
            }
            if(j>=w[i][0]+w[i][1]&&j<=w[i][0]+w[i][1]+w[i][2]){
                f[i]=max(f[i],f[j-w[i][0]-w[i][1]]+c[i][0]+c[i][1]);
            }
            if(j>=w[i][0]+w[i][2]&&j<=w[i][0]+w[i][1]+w[i][2]){
                f[i]=max(f[i],f[j-w[i][0]-w[i][2]]+c[i][0]+c[i][2]);
            }
            if(j>=w[i][0]+w[i][1]+w[i][2]){
                f[i]=max(f[i],f[j-w[i][0]-w[i][1]-w[i][2]]+c[i][0]+c[i][1]+c[i][2]);
            }
        }
    }
    cout<<f[m];

    return 0;
}

这粘贴有毒


by 吴勉之 @ 2019-02-16 10:21:50

有毒

by 月离 @ 2019-02-16 11:01:56

该问题已解决

代码如下

#include<iostream>
#include<cstring>
using namespace std;
int n,m;
int c[100000][5];
int w[100000][5];
int ans=0;
int f[100000];
int main(){
    cin>>m>>n;
    for(int i=1;i<=n;i++){
        int ww,cc,pp;
        cin>>ww>>cc>>pp;
        if(pp==0){
            c[i][0]=cc;
            w[i][0]=ww;
            c[i][0]=w[i][0]*c[i][0];
        }
        if(pp!=0){
            if(w[pp][1]==0){
                c[pp][1]=cc;
                w[pp][1]=ww;
                c[pp][1]=ww*cc;
            }
            else{
                c[pp][2]=cc;
                w[pp][2]=ww;
                c[pp][2]=ww*cc;
            }
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=m;j>=0;--j){
            if(j>=w[i][0]){
                f[j]=max(f[j],f[j-w[i][0]]+c[i][0]);
            }
            if(j>=w[i][0]+w[i][1]){
                f[j]=max(f[j],f[j-w[i][0]-w[i][1]]+c[i][0]+c[i][1]);
            }
            if(j>=w[i][0]+w[i][2]){
                f[j]=max(f[j],f[j-w[i][0]-w[i][2]]+c[i][0]+c[i][2]);
            }
            if(j>=w[i][0]+w[i][1]+w[i][2]){
                f[j]=max(f[j],f[j-w[i][0]-w[i][1]-w[i][2]]+c[i][0]+c[i][1]+c[i][2]);
            }
        }
    }
    cout<<f[m];

    return 0;
}

心累


|