首页 > 其他分享 >AcWing 1013. 机器分配

AcWing 1013. 机器分配

时间:2023-04-02 15:36:50浏览次数:49  
标签:输出 include 机器 分公司 int 1013 盈利 设备 AcWing

总公司拥有 M 台 相同 的高效设备,准备分给下属的 N 个分公司。

各分公司若获得这些设备,可以为国家提供一定的盈利。盈利与分配的设备数量有关。

问:如何分配这M台设备才能使国家得到的盈利最大?

求出最大盈利值。

分配原则:每个公司有权获得任意数目的设备,但总台数不超过设备数 M。

输入格式

第一行有两个数,第一个数是分公司数 N,第二个数是设备台数 M;

接下来是一个 N×M 的矩阵,矩阵中的第 i 行第 j 列的整数表示第 i 个公司分配 j 台机器时的盈利。

输出格式

第一行输出最大盈利值;

接下 N 行,每行有 22 个数,即分公司编号和该分公司获得设备台数。

答案不唯一,输出任意合法方案即可。

数据范围

1≤N≤10,
1≤M≤15

输入样例:

3 3
30 40 50
20 30 50
20 25 30

输出样例:

70
1 1
2 1
3 1

问题分析;

计算最大盈利值的方法和分组背包一致,合法方案的输出由于没有字典序的限制,所以输出可以比较随意,但必须确保dp顺序和查找输出顺序必须相反。

代码实现:

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int N=25;
int dp[N][N];
vector<int>res;
int w[N][N];
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++)cin>>w[i][j];
    }
    for(int i=1;i<=n;i++){
        for(int j=0;j<=m;j++){
            dp[i][j]=dp[i-1][j];
            for(int k=1;k<=j;k++){
                dp[i][j]=max(dp[i][j],dp[i-1][j-k]+w[i][k]);
            }
        }
    }
    cout<<dp[n][m]<<endl;
    int s=m;
    for(int i=n;i>=1;i--){
        for(int k=0;k<=s;k++){
            if(dp[i][s]==(dp[i-1][s-k]+w[i][k])){
                res.push_back(k);
                s-=k;
                break;
            }  
        }
    }
    for(int i=res.size()-1;i>=0;i--)cout<<res.size()-i<<" "<<res[i]<<endl;
    return 0;
}

 

标签:输出,include,机器,分公司,int,1013,盈利,设备,AcWing
From: https://www.cnblogs.com/hxss/p/17280545.html

相关文章

  • AcWing 12. 背包问题求具体方案
    有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出 字典序最小的方案。这里的字典序是指:所选物品的编号所构成的序列。物品的编号范围是 1…......
  • AcWing 1023. 买书
    小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元。问小明有多少种买书方案?(每种书可购买多本)输入格式一个整数n,代表总共钱数。输出格式一个整数,代表选择方案种数。数据范围0≤n≤1000输入样例1:20输出样例1:2输入样例2:15输出样例2:0输入样例3:0输出样例3:1......
  • AcWing 278. 数字组合
    给定 N 个正整数 A1,A2,…,AN,从中选出若干个数,使它们的和为 M,求有多少种选择方案。输入格式第一行包含两个整数 N 和 M。第二行包含 N 个整数,表示 A1,A2,…,AN。输出格式包含一个整数,表示可选方案数。数据范围1≤N≤100,1≤M≤10000,1≤Ai≤1000,答案保证在int......
  • AcWing 1022. 宠物小精灵之收服
    宠物小精灵是一部讲述小智和他的搭档皮卡丘一起冒险的故事。一天,小智和皮卡丘来到了小精灵狩猎场,里面有很多珍贵的野生宠物小精灵。小智也想收服其中的一些小精灵。然而,野生的小精灵并不那么容易被收服。对于每一个野生小精灵而言,小智可能需要使用很多个精灵球才能收服它,而在......
  • AcWing 1024. 装箱问题
    有一个箱子容量为V,同时有n个物品,每个物品有一个体积(正整数)。要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。输入格式第一行是一个整数V,表示箱子容量。第二行是一个整数n,表示物品数。接下来n行,每行一个正整数(不超过10000),分别表示这n个物品的各自体积。......
  • AcWing 8. 二维费用的背包问题
    有 N 件物品和一个容量是 V 的背包,背包能承受的最大重量是 M。每件物品只能用一次。体积是 vi,重量是 mi,价值是 wi。求解将哪些物品装入背包,可使物品总体积不超过背包容量,总重量不超过背包可承受的最大重量,且价值总和最大。输出最大价值。输入格式第一行三个整数,N,V,M,......
  • AcWing 9. 分组背包问题
    有N组物品和一个容量是V的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是vij,价值是wij,其中i是组号,j是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数N,V,用空格隔开,分别......
  • AcWing 3. 完全背包问题
    有N种物品和一个容量是V的背包,每种物品都有无限件可用。第i种物品的体积是vi,价值是wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有N行,每行两个......
  • AcWing 4. 多重背包问题
    有N种物品和一个容量是V的背包。第i种物品最多有si件,每件体积是vi,价值是wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有N行,每行三个整数vi,wi,......
  • AcWing 2. 01背包问题
    有N件物品和一个容量是V的背包。每件物品只能使用一次。第i件物品的体积是vi,价值是wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有N行,每行两个......