zoukankan      html  css  js  c++  java
  • NOIP2006 第二题(change)

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 struct thing
     5 {
     6    int w[3],v[3];
     7    int size;
     8 };
     9 
    10 int main()
    11 {
    12     struct thing t[61];
    13     int i,tag,tag2,j,k,n,m,v,w,p;
    14     int s[2][32001];
    15     memset(s[0],0,sizeof(int)*32001);
    16     scanf("%d %d",&n,&m);
    17     tag=1;
    18     for(i=1;i<=m;i++)
    19     {
    20        scanf("%d %d %d",&w,&v,&p);
    21        if(p==0)
    22        {
    23           t[tag].size=1;
    24           t[tag].w[0]=w;t[tag].w[1]=0;t[tag].w[2]=0;
    25           t[tag].v[0]=v;t[tag].v[1]=0;t[tag].v[2]=0;
    26           tag++;
    27        }
    28        else
    29        {
    30           t[p].size++;
    31           t[p].w[t[p].size-1]=w;
    32           t[p].v[t[p].size-1]=v;
    33        }
    34     }
    35     for(i=1;i<tag;i++)
    36     {
    37        for(j=0;j<=n;j++)
    38        {
    39           tag2=0;
    40           if(j-t[i].w[0]>=0&&s[(i-1)%2][j-t[i].w[0]]+t[i].w[0]*t[i].v[0]>s[(i-1)%2][j])
    41           {
    42               s[i%2][j]=s[(i-1)%2][j-t[i].w[0]]+t[i].w[0]*t[i].v[0];tag2=1;
    43           }
    44           if(j-t[i].w[0]-t[i].w[1]>=0&&s[(i-1)%2][j-t[i].w[0]-t[i].w[1]]+t[i].w[0]*t[i].v[0]+t[i].w[1]*t[i].v[1]>s[(i-1)%2][j])
    45           {
    46               s[i%2][j]=s[(i-1)%2][j-t[i].w[0]-t[i].w[1]]+t[i].w[0]*t[i].v[0]+t[i].w[1]*t[i].v[1];tag2=1;
    47           }
    48           if(j-t[i].w[0]-t[i].w[2]>=0&&s[(i-1)%2][j-t[i].w[0]-t[i].w[2]]+t[i].w[0]*t[i].v[0]+t[i].w[2]*t[i].v[2]>s[(i-1)%2][j])
    49           {
    50               s[i%2][j]=s[(i-1)%2][j-t[i].w[0]-t[i].w[2]]+t[i].w[0]*t[i].v[0]+t[i].w[2]*t[i].v[2];tag2=1;
    51           }
    52           if(j-t[i].w[0]-t[i].w[1]-t[i].w[2]>=0&&s[(i-1)%2][j-t[i].w[0]-t[i].w[2]]+t[i].w[0]*t[i].v[0]+t[i].w[1]*t[i].v[1]+t[i].w[2]*t[i].v[2]>s[(i-1)%2][j])
    53           {
    54               s[i%2][j]=s[(i-1)%2][j-t[i].w[0]-t[i].w[1]-t[i].w[2]]+t[i].w[0]*t[i].v[0]+t[i].w[1]*t[i].v[1]+t[i].w[2]*t[i].v[2];tag2=1;
    55           }
    56           if(tag2==0)
    57               s[i%2][j]=s[(i-1)%2][j];
    58        }
    59     }
    60     printf("%d
    ",s[(tag-1)%2][n]);
    61     while(true);
    62     return 0;
    63 }

    <问题分析>

    典型的背包问题,用一个结构体将附件与主件捆绑,状态转移方程 if(j-w[i]>=0) s[i][j]=max(s[i-1][j],s[i-1][j-w[i]]+w[i]*v[i]) else s[i][j]=s[i-1][j]

  • 相关阅读:
    iOS APM性能统计
    iOS promise
    静态代码检测工具Infer的部署
    ES读写数据的工作原理
    关于 Elasticsearch 内存占用及分配
    Elasticsearch中数据是如何存储的
    ES中的选举机制
    .net core 3.1 webapi解决跨域问题 GET DELETE POST PUT等
    .net framework WEBAPI跨域问题
    Angular前端项目发布到IIS
  • 原文地址:https://www.cnblogs.com/simplesslife/p/Herbs2.html
Copyright © 2011-2022 走看看