利润问题

一 分配问题汇总 dp

0-1背包问题,完全背包问题
IPO 最小资本,最大利润:
https://leetcode.cn/problems/ipo/
机器分配:
https://www.luogu.com.cn/problem/P2066
https://www.wenjiangs.com/doc/kdnhlhq9sq
两个数组同时排序
。。。
安排工作以达到最大收益
https://leetcode.cn/problems/most-profit-assigning-work/description/

`455. 分发饼干/135. 分发糖果
https://www.xiaohongshu.com/discovery/item/620e6158000000000102df93
重建身高

二 股票问题-状态机

最佳观光组合
https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/
https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/
https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/
https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv/
最佳买卖股票时机含冷冻期
买卖股票的最佳时机含手续费

买卖股票系列总结

三 高频

最长回文子串:中间扩散法
太平洋流水:逆向搜索
接雨水:双指针
跳台阶:贪心

机器分配

题目描述

总公司拥有高效设备 台,准备分给下属的 个分公司。各分公司若获得这些设备,可以为国家提供一定的盈利。问:如何分配这 台设备才能使国家得到的盈利最大?求出最大盈利值。其中 ,。分配原则:每个公司有权获得任意数目的设备,但总台数不超过设备数 。

输入格式

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

接下来是一个 的矩阵,表明了第 个公司分配 台机器的盈利。

输出格式

第一行为最大盈利值。

接下来 行为第 分公司分 台。

P.S. 要求答案的字典序最小。

样例 #1

样例输入 #1

3 3
30 40 50
20 30 50
20 25 30

样例输出 #1

70
1 1
2 1
3 1

未通过


N, M = map(int, input().split())
value = [[0]*(M+1) for i in range(N+1)]
ans = [0] * (N+1)
def dp(N, M):
    if N == 0 or M == 0: return 0
    if N == 1: return value[0][M-1]
    s = float("-inf")
    if M == 1: 
        for i in range(1, N+1):
            s = max(s, value[i][1])
        return s
    for m in range(1, M+1):
        #s = max(s, dp(N-1, M-m)+value[N][m])
        t = dp(N-1, M-m)+value[N][m]
        if t > s:
            s = t
            ans[N] = m
    return s

s = dp(N, M)
print(s)
for i in range(N):
    print(i+1, ans[i])  

你可能感兴趣的:(利润问题)