1. 程式人生 > >洛谷 p1064 預算

洛谷 p1064 預算

ring end truct blog pan int mat math.h 預算

思想完全是一樣的啊。。。。為毛我的炸掉

#include<iostream>
#include<string.h>
#include<math.h>
#include<stdio.h>
#include<map>
#include<algorithm>
using namespace std;
/*
μúò?′?꧰ü?-òò£?
??μ¥′?±è???÷???tíüá??÷?t???ü·?ò?′? 
 *****êy?Y?ó****** 
*/
int n,m,maxn;
int f[32005];
int flag[66]; 
struct infor{ int v; int p; int q; int num[3]; }a[66]; int main() { int i,j; cin>>n>>m; for(i=1;i<=m;i++) { scanf("%d",&a[i].v); scanf("%d",&a[i].p); scanf("%d",&a[i].q); if(a[i].q!=0) { int t=a[i].q; a[t].num[
++a[t].num[0]]=i; } } /*for(i=1;i<=m;i++) { printf("a[%d].q=%d,a[%d].num[0]=%d,a[%d].num[1]=%d,a[%d].num[2]=%d\n",i,a[i].q,i,a[i].num[0],i,a[i].num[1],i,a[i].num[2]); }*/ for(i=1;i<=m;i++) { for(j=n;j>=a[i].v;j--) { if(a[i].q==0
) f[j]=max(f[j],f[j-a[i].v]+a[i].v*a[i].p); } }//?????÷?t for(i=1;i<=m;i++) { infor w=a[a[i].q]; infor k=a[w.num[1]]; infor e=a[w.num[2]]; for(j=n;j>=a[i].v;j--) { if (a[i].q!=0) { int x=0,y=0; if(j-a[i].v-k.v>=0) { x=max(f[j],f[j-a[i].v-k.v]+a[i].v*a[i].p+k.v*k.p); } if(j-a[i].v-e.v>=0) { y=max(f[j],f[j-a[i].v-e.v]+a[i].v*a[i].p+e.v*e.p); } f[j]=max(x,y); } else { f[j]=max(f[j],f[j-a[i].v]+a[i].v*a[i].p); } } }//???÷?t +ò??± for(i=1;i<=m;i++) { infor w=a[a[i].q]; infor k=a[w.num[1]]; infor e=a[w.num[2]]; for(j=n;j>=a[i].v-k.v-e.v;j--) { if(a[i].q!=0) { f[j]=max(f[j],f[j-a[i].v-k.v-e.v]+a[i].v*a[i].p+k.v*k.p+e.v*e.p); } else { f[j]=max(f[j],f[j-a[i].v]+a[i].v*a[i].p); } } }//???÷?t +2?± for(i=0;i<=n;i++) { maxn=max(maxn,f[i]); } printf("%d\n",maxn); return 0; }
#include <iostream>
#define maxn 32005
using namespace std;
int n,m;
int v,p,q;
int main_item_w[maxn];
int main_item_c[maxn];
int annex_item_w[maxn][3];
int annex_item_c[maxn][3];
int f[maxn];
int main(){
    cin >> n >> m;
    for (int i=1;i<=m;i++){
        cin >> v >> p >> q;
        if (!q){
            main_item_w[i] = v;
            main_item_c[i] = v * p;
        }
        else{
            annex_item_w[q][0]++;
            annex_item_w[q][annex_item_w[q][0]] = v;
            annex_item_c[q][annex_item_w[q][0]] = v * p;
        }
    }

    for (int i=1;i<=m;i++)
        for (int j=n;main_item_w[i]!=0 && j>=main_item_w[i];j--){
            f[j] = max(f[j],f[j-main_item_w[i]]+main_item_c[i]);

            if (j >= main_item_w[i] + annex_item_w[i][1])
                f[j] = max(f[j],f[ j - main_item_w[i] - annex_item_w[i][1] ] + main_item_c[i] + annex_item_c[i][1]);

            if (j >= main_item_w[i] + annex_item_w[i][2])
                f[j] = max(f[j],f[ j - main_item_w[i] - annex_item_w[i][2] ] + main_item_c[i] + annex_item_c[i][2]);

            if (j >= main_item_w[i] + annex_item_w[i][1] + annex_item_w[i][2])
                f[j] = max(f[j],f[ j - main_item_w[i] - annex_item_w[i][1] - annex_item_w[i][2] ] + main_item_c[i] + annex_item_c[i][1] + annex_item_c[i][2]);

         }
     cout << f[n] << endl;
     return 0;
}

洛谷 p1064 預算