码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷 p1064 预算

时间:2017-10-03 18:59:07      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:pre   --   ann   algorithm   ***   cin   mat   math   def   

思想完全是一样的啊。。。。为毛我的炸掉

#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 预算

标签:pre   --   ann   algorithm   ***   cin   mat   math   def   

原文地址:http://www.cnblogs.com/voldemorte/p/7624230.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!