zoukankan      html  css  js  c++  java
  • tyvj 1013 找啊找啊找GF

    题目大意:

    有一个背包,里面的东西需要满足两个条件,不只是体积

    求最多能装多少东西,这些东西的东西最小价值

    思路:

    双重背包

    开两个数组,记录装的东西数量和价值

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<cstring>
     6 #include<cstdlib>
     7 #include<queue>
     8 #include<vector>
     9 #include<set>
    10 #include<map>
    11 #include<stack>
    12 #define inf 2147483611
    13 #define ll long long
    14 #define MAXN 110
    15 using namespace std;
    16 inline int read()
    17 {
    18     int x=0,f=1;
    19     char ch=getchar();
    20     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
    21     while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
    22     return x*f;
    23 }
    24 int n,na[MAXN],nb[MAXN],v[MAXN],a,b;
    25 int dpn[MAXN][MAXN],dpt[MAXN][MAXN];
    26 int main()
    27 {
    28     n=read();
    29     for(int i=1;i<=n;i++) na[i]=read(),nb[i]=read(),v[i]=read();
    30     a=read(),b=read();
    31     for(int k=1;k<=n;k++)
    32         for(int i=a;i>=na[k];i--)
    33             for(int j=b;j>=nb[k];j--)
    34             {
    35                 if(dpn[i][j]==dpn[i-na[k]][j-nb[k]]+1)
    36                     dpt[i][j]=min(dpt[i-na[k]][j-nb[k]]+v[k],dpt[i][j]);
    37                 if(dpn[i][j]<dpn[i-na[k]][j-nb[k]]+1)
    38                 {
    39                     dpn[i][j]=dpn[i-na[k]][j-nb[k]]+1;
    40                     dpt[i][j]=dpt[i-na[k]][j-nb[k]]+v[k];
    41                 }
    42             }
    43     printf("%d",dpt[a][b]);
    44 }
    View Code
  • 相关阅读:
    第二周之Hadoop学习(二)
    Java课程----自我介绍
    关于最大子序和的算法问题
    记账本----完结
    《人月神话》读后感----四
    记账本----四
    记账本----四
    《人月神话》读后感------三
    记账本------三
    家庭记账本----二
  • 原文地址:https://www.cnblogs.com/yyc-jack-0920/p/7701401.html
Copyright © 2011-2022 走看看