zoukankan      html  css  js  c++  java
  • AcWing 487. 金明的预算方案

    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #define v first
    #define w second
    using namespace std;
    typedef pair<int, int> PII;
    const int N = 60, M = 32010;
    int n, m;
    PII master[N];
    vector<PII> servent[N];
    int f[M];
    int main() {
        cin >> m >> n;//m总钱数  n个数 
        for (int i = 1; i <= n; i ++ ) {
            int v, p, q;
            cin >> v >> p >> q;
            p *= v;//价值 
            if (!q) master[i] = {v, p};//如果是0,表示为主件 
            else servent[q].push_back({v, p});//如果不是0,为附件,插入相关主键 
        }
        for (int i = 1; i <= n; i ++ )//个数 
            for (int u = m; u >= 0; u -- ) {//总钱数 
                for (int j = 0; j < 1 << servent[i].size(); j ++ )
                //转换为二进制,对于每个主件,有几种选法 
                 {
                    int v = master[i].v, w = master[i].w;
                    for (int k = 0; k < servent[i].size(); k ++ )
                        if (j >> k & 1)
                        {//如果第k位是1,那就说明选第k个 
                            v += servent[i][k].v;
                            w += servent[i][k].w;
                        }
                    if (u >= v) f[u] = max(f[u], f[u - v] + w);
                }
            } 
        cout << f[m] << endl;
        return 0;
    }
    #include<iostream>
    #include<vector>
    #define v first
    #define w second
    using namespace std ;
    typedef pair<int,int>PII;
    const int N=32100;
    int f[N];
    int n,m;
    vector<PII>servent[N];
    PII master[N];
    int main()
    {
        cin>>m>>n;
        for(int i=1;i<=n;i++)
        {
            int v,p,q;
            cin>>v>>p>>q;
            p*=v;
            if(!q)
                master[i]={v,p};
            else 
                servent[q].push_back({v,p});
        }
        for(int i=1;i<=n;i++)
            for(int j=m;j>=0;j--)
                for(int k=0;k< 1<<servent[i].size();k++)
                {
                    int w=master[i].w,v=master[i].v;
                    for(int u=0;u<servent[i].size();u++)
                    {
                        if(k>>u&1)
                        {
                            w+=servent[i][u].w;
                            v+=servent[i][u].v;
                        }
                    }
                    if(j>=v)
                        f[j]=max(f[j],f[j-v]+w);
                }
        cout<<f[m]<<endl;
        return 0;
    }
  • 相关阅读:
    实验axios用户登录及token验证
    vue的路由跳转了,可是页面没有变化
    搞清楚cookie,session,token,JWT
    APP应用测试流程
    Scrum敏捷开发
    APP项目环境及发布平台
    ssh -T git@github.com ssh: connect to host github.com port 22: Connection timed out
    pytest与unitest区别
    数据库三大范式--大白话
    docker 安装mysql挂载/var/lib/mysql目录时启动就退出
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12000451.html
Copyright © 2011-2022 走看看