• 洛谷 p1064 预算


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

    #include<iostream>
    #include<string.h>
    #include<math.h>
    #include<stdio.h>
    #include<map>
    #include<algorithm>
    using namespace std;
    /*
    µÚÒ»´Îʧ°ÜÔ­Òò£»
    Ö»µ¥´¿±È½Ï¸÷¸ö¼þÍüÁËÖ÷¼þÖ»ÄÜ·ÅÒ»´Î 
     *****Êý¾Ý¿Ó****** 
    */
    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
    ",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);
           }        
        }//ֻѡÖ÷¼þ 
        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);    
                }    
           }        
        }//Ñ¡Ö÷¼þ +Ò»¸± 
        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);    
                }    
           }        
        }//Ñ¡Ö÷¼þ +2¸± 
        for(i=0;i<=n;i++)
        {
           
            maxn=max(maxn,f[i]);
          
        }
       printf("%d
    ",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;
    }
  • 相关阅读:
    List遍历时删除与迭代器(Iterator)解惑
    从一次“并发修改字段业务”引出多版本并发控制与InnoDB锁
    RocketMQ存储机制与确认重传机制
    Java中的锁
    jmeter在non-GUI模式下用法
    Java SPI机制简述
    深拷贝、浅拷贝与Cloneable接口
    Java中的小数运算与精度损失
    java中的枚举类
    SpringBoot是如何实现自动配置的
  • 原文地址:https://www.cnblogs.com/voldemorte/p/7624230.html
Copyright © 2020-2023  润新知