1022. 宠物小精灵之收服

Powered by:NEFU AB-IN

Link

文章目录

题意

思路

https://www.acwing.com/solution/content/117213/

  1. 第一问为二维背包模板
python 复制代码
n, V, M = IO.read()
dp = Arr.array2d(0, V + 1, M + 1)

for i in range(n):
    v, m, w = IO.read()
    for j in range(V, v - 1, - 1):
        for k in range(M, m - 1, -1):
            dp[j][k] = Math.min(dp[j][k], dp[j - v][k - m] + w)

print(dp[V][M])
  1. 第二问为求剩余体力最大多少,那就是找二维数组的最后,有多少和fNM相同的数

代码

python 复制代码
'''
Author: NEFU AB-IN
Date: 2024-08-15 23:21:56
FilePath: \Acwing\1022\1022.py
LastEditTime: 2024-08-15 23:22:02
'''
# 3.8.19 import
import random
from collections import Counter, defaultdict, deque
from datetime import datetime, timedelta
from functools import lru_cache, reduce
from heapq import heapify, heappop, heappush, nlargest, nsmallest
from itertools import combinations, compress, permutations, starmap, tee
from math import ceil, comb, fabs, floor, gcd, hypot, log, perm, sqrt
from string import ascii_lowercase, ascii_uppercase
from sys import exit, setrecursionlimit, stdin
from typing import Any, Callable, Dict, List, Optional, Tuple, TypeVar, Union

# Constants
TYPE = TypeVar('TYPE')
N = int(2e5 + 10)
M = int(20)
INF = int(1e12)
OFFSET = int(100)
MOD = int(1e9 + 7)

# Set recursion limit
setrecursionlimit(int(2e9))


class Arr:
    array = staticmethod(lambda x=0, size=N: [x() if callable(x) else x for _ in range(size)])
    array2d = staticmethod(lambda x=0, rows=N, cols=M: [Arr.array(x, cols) for _ in range(rows)])
    graph = staticmethod(lambda size=N: [[] for _ in range(size)])


class Math:
    max = staticmethod(lambda a, b: a if a > b else b)
    min = staticmethod(lambda a, b: a if a < b else b)


class IO:
    input = staticmethod(lambda: stdin.readline().rstrip("\r\n"))
    read = staticmethod(lambda: map(int, IO.input().split()))
    read_list = staticmethod(lambda: list(IO.read()))


class Std:
    pass

# --------------------------------------------------------------- Division line ------------------------------------------------------------------
import bisect


def dp(N, M, K, balls, blood):
    f = [[0] * (M + 1) for _ in range(N + 1)]
    for i in range(K):
        for j in range(N, balls[i] - 1, -1):
            for k in range(M, blood[i], - 1):
                f[j][k] = max(f[j][k], f[j - balls[i]][k - blood[i]] + 1)

    if f[N][M] == 0 : return 0, M

    return f[N][M], M - bisect.bisect_left(f[N], f[N][M]) + 1

N, M, K = map(int, stdin.readline().split())
balls, blood = [0] * K, [0] * K
for i in range(K):
    balls[i], blood[i] = map(int, stdin.readline().split())

C, R = dp(N, M, K, balls, blood)
print(str(C) + ' ' + str(R))
相关推荐
chenment1 小时前
ComfyUI 自定义节点开发:从零扩展你的图像生成工作流
python·stable diffusion
互联网中的一颗神经元2 小时前
小白python入门 - 25. SQL 与表设计入门
数据库·python·sql
RSTJ_16254 小时前
PYTHON+AI LLM DAY ONE HUNDRED AND EIGHTEEN
python
开源量化GO4 小时前
近期量化学习路径,交易理解和技术实现要接上
人工智能·python
c_lb72884 小时前
近期手工规则量化,学习表达到开发验证要连起来
人工智能·python
tkevinjd5 小时前
MiniCode 项目详解7:Memory 记忆系统
大数据·python·搜索引擎·llm·agent
郭老二5 小时前
【Python】Web框架 FastAPI 详解
python·fastapi
DFT计算杂谈5 小时前
交错磁研究进展材料物性与交叉应用
数据库·人工智能·python·opencv·算法
敖行客 Allthinker5 小时前
docker容器安装Python反推镜像步骤(适用于临时调试用)
python·docker·容器
rrrjqy5 小时前
夏普比率与 Beta——Quant-for-Beginners 量化入门Task7
python·金融