• POJ 1170


    #include<iostream>
    #define MAXN 1000
    #define M_100 100
    #define M_5 6
    #define inf 1000000000
    using namespace std;
    
    struct _code
    {
        long num;
        long price;
        int place;
    };
    
    struct _node
    {
        int n[5];
        bool prop;
        long price;
    };
    
    long dp[M_5][M_5][M_5][M_5][M_5];
    
    _node _offer[M_100];
    
    _code _m[MAXN];
    
    int _sub[M_5];
    long n[M_5+1];
    void init();
    int num_off;
    long _dp();
    
    int main()
    {
        //freopen("acm.acm","r",stdin);
        memset(dp,-1,sizeof(dp));
        dp[0][0][0][0][0] = 0;
        int num_buy;
        int num_pair;
        int i;
        int j;
        int u;
        int one_code;
        int one_num;
        init();
        memset(_sub,-1,sizeof(_sub));
        cin>>num_buy;
        for(i = 0; i < num_buy; ++ i)
        {
            cin>>u;
            cin>>_m[u].num;
            cin>>_m[u].price;
            _m[u].place = i;
            _sub[i] = u;
        }
        cin>>num_off;
        for(i = 0; i < num_off; ++ i)
        {
            cin>>num_pair;
            for(j = 0; j < num_pair; ++ j)
            {
                cin>>one_code;
                cin>>one_num;
                if(_m[one_code].num == -1)
                {
                    _offer[i].prop = false;
                }
                else
                {
                    _offer[i].n[_m[one_code].place] = one_num;
                }
            }
            cin>>_offer[i].price;
        }
        memset(n,0,sizeof(n));
        for(i = 0;; ++ i)
        {
            if(_sub[i] != -1)
            {
                n[i+1] = _m[_sub[i]].num;
            }
            else
                break;
        }
        cout<<_dp();    
    }
    
    long _dp()
    {
        int i;
        if(dp[n[1]][n[2]][n[3]][n[4]][n[5]] != -1)
        {
            return dp[n[1]][n[2]][n[3]][n[4]][n[5]];
        }
        else
        {
            long sum_1 = 0;
            long sum_2 = 0;
            int j;
            for(i = 0; i < 5; ++ i)
            {
                if(_sub[i] == -1)
                {
                    break;
                }
                else 
                {
                    sum_1 += n[i+1]*_m[_sub[i]].price;
                }
            }
            long min = sum_1;
            for(i = 0; i < num_off; ++ i)
            {
                if(_offer[i].prop)
                {
                    for(j = 0; j < 5; ++ j)
                    {
                        if(n[j+1] < _offer[i].n[j])
                            break;
                    }
                    if(j != 5)
                        continue;
                    else
                    {
                        for(j = 0; j < 5; ++ j)
                        {
                            n[j+1] -= _offer[i].n[j];
                        }
                    }
                    sum_2 = _offer[i].price;
                    sum_2 += _dp();
                    for(j = 0; j < 5; ++ j)
                    {
                        n[j+1] += _offer[i].n[j];
                    }
                    if(min > sum_2)
                    {
                        min = sum_2;
                    }
    
                }
            }
            dp[n[1]][n[2]][n[3]][n[4]][n[5]] = min;
            return min;
        }
    }
    
    void init()
    {
        int i;
        int j;
        for(i = 0; i < MAXN; ++ i)
        {
            _m[i].num = -1;
        }
        for(i = 0; i < M_100; ++ i)
        {
            for(j = 0; j < 5; ++ j)
            {
                _offer[i].n[j] = 0;
            }
            _offer[i].prop = true;
        }
    }

    关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。 

    技术网站地址: vmfor.com

  • 相关阅读:
    vue+element ui 表格自定义样式溢出隐藏
    vue自定义指令directives使用及生命周期
    前端如何下载文件
    js实现活动倒计时
    echarts自定义提示框数据
    vue项目如何刷新当前页面
    数据库——关于索引
    Javascript节点选择
    asp.net 身份验证(Update)
    ASP.config配置
  • 原文地址:https://www.cnblogs.com/gavinsp/p/4563322.html
Copyright © 2020-2023  润新知