zoukankan      html  css  js  c++  java
  • USACO3.32Shopping Offers(DP)

    五维DP,听着挺多的,貌似就是挺裸的dp,

    最近貌似做简单的DP挺顺手。。1A

    dp[i][j][e][o][g] = min(dp[i][j][e][o][g],dp[i-i1][j-i2][e-i3][o-i4][g-i5]+p[q])  i1,i2...为满足给出的商品数量的值 p[q]为选用当前优惠方案的价格。

     1 /*
     2     ID: shangca2
     3     LANG: C++
     4     TASK: shopping
     5  */
     6 #include <iostream>
     7 #include<cstdio>
     8 #include<cstring>
     9 #include<algorithm>
    10 #include<stdlib.h>
    11 using namespace std;
    12 #define INF 0xfffffff
    13 int dp[6][6][6][6][6];
    14 struct node
    15 {
    16     int c[6],k[6],p,n;
    17 }pp[110];
    18 int c[6],k[6],p[6];
    19 int main()
    20 {
    21     freopen("shopping.in","r",stdin);
    22     freopen("shopping.out","w",stdout);
    23     int i,j,s,b,e,o,g,q,a;
    24     for(i =0 ; i <= 5 ; i++)
    25         for(j = 0 ; j <= 5 ; j++)
    26             for(e = 0 ; e <= 5 ; e++)
    27                 for(o = 0 ; o <= 5 ; o++)
    28                     for(g = 0 ; g <= 5 ; g++)
    29                     dp[i][j][e][o][g] = INF;
    30     cin>>s;
    31     for(i = 1; i <= s ; i++)
    32     {
    33         cin>>pp[i].n;
    34         for(j = 1; j <= pp[i].n ; j++)
    35         cin>>pp[i].c[j]>>pp[i].k[j];
    36         cin>>pp[i].p;
    37     }
    38     cin>>b;
    39     for(i =  1; i <= b ;i++)
    40     cin>>c[i]>>k[i]>>p[i];
    41     for(i = 0 ;i <= k[1] ; i++)
    42     for(j = 0; j <= k[2] ; j++)
    43     for(e = 0; e <= k[3] ; e++)
    44     for(o = 0 ; o <= k[4] ;o++)
    45     for(g = 0 ; g <= k[5] ; g++)
    46     {
    47         dp[i][j][e][o][g] = i*p[1]+j*p[2]+e*p[3]+o*p[4]+g*p[5];
    48         for(q = 1; q <= s ; q++)
    49         {
    50             int i1=0,i2=0,i3=0,i4=0,i5=0;
    51             for(a = 1; a <= pp[q].n ;a++)
    52             {
    53                 if(pp[q].c[a]==c[1])
    54                 i1 = pp[q].k[a];
    55                 else if(pp[q].c[a]==c[2])
    56                 i2 = pp[q].k[a];
    57                 else if(pp[q].c[a]==c[3])
    58                 i3 = pp[q].k[a];
    59                 else if(pp[q].c[a]==c[4])
    60                 i4 = pp[q].k[a];
    61                 else
    62                 i5 = pp[q].k[a];
    63             }
    64             if(i-i1>=0&&j-i2>=0&&e-i3>=0&&o-i4>=0&&g-i5>=0)
    65             {
    66                 dp[i][j][e][o][g] = min(dp[i][j][e][o][g],dp[i-i1][j-i2][e-i3][o-i4][g-i5]+pp[q].p);
    67             }
    68         }
    69     }
    70     cout<<dp[k[1]][k[2]][k[3]][k[4]][k[5]]<<endl;
    71     return 0;
    72 }
    View Code
  • 相关阅读:
    4.定时器
    LSTM分类层的理解
    对机器学习中end-to-end learning(端到端学习)的理解
    对非极大值限制(NMS)的理解
    ROI pooling
    softmax的理解
    长尾理论(long tail )的理解
    对双线性插值的理解
    RPN的理解
    卷积神经网络(CNN)和Faster-RCNN的理解
  • 原文地址:https://www.cnblogs.com/shangyu/p/3271744.html
Copyright © 2011-2022 走看看