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. 第二问为求剩余体力最大多少,那就是找二维数组的最后,有多少和f[N][M]相同的数

代码

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))
相关推荐
执笔论英雄6 分钟前
Slime异步原理(单例设计模式)4
开发语言·python·设计模式
小徐敲java2 小时前
python使用s7协议与plc进行数据通讯(HslCommunication模拟)
开发语言·python
猫头虎2 小时前
如何解决 pip install 编译报错 fatal error: hdf5.h: No such file or directory(h5py)问题
人工智能·python·pycharm·开源·beautifulsoup·ai编程·pip
p***23362 小时前
python的sql解析库-sqlparse
数据库·python·sql
陈奕昆2 小时前
n8n实战营Day1课时3:高频节点解析+Webhook表单同步Excel实操
人工智能·python·n8n
深蓝电商API2 小时前
动态 Token、加密参数逆向全流程:从原理到实战破解
爬虫·python
qq_17082750 CNC注塑机数采2 小时前
【Python TensorFlow】 TCN-GRU时间序列卷积门控循环神经网络时序预测算法(附代码)
python·rnn·神经网络·机器学习·gru·tensorflow·tcn
java1234_小锋2 小时前
基于Python深度学习的车辆车牌识别系统(PyTorch2卷积神经网络CNN+OpenCV4实现)视频教程 - 切割车牌矩阵获取车牌字符
python·深度学习·cnn·车牌识别
u***28473 小时前
Python连接SQL SEVER数据库全流程
数据库·python·sql
测试19983 小时前
接口测试工具之postman详解
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman