P5365 [SNOI2017]英雄联盟 题解
简要题意:
长度为 的序列 ,初始均为 . 可以花 的代价使 . 求最少花多少代价能使 (其中不计 的积)。
.
个人觉得其实可以先算一下代价的最大值。
很显然代价最大值为 ,也就是 左右。
于是背包 应运而生。
很显然,令 表示前 个数,换 的代价所能达到的最大乘积(除 ). 则很容易得到
时间复杂度:,非常稳。
空间可能会爆,那就滚动数组,把 这一维省掉。但要注意倒序枚举。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 3e5 + 1;
const int M = 2e2 + 1;
int n; ll m;
int K[M], c[M];
ll f[N];
int main() {
scanf("%d %lld",&n,&m);
for(int i = 1; i <= n; i++) scanf("%d", K + i);
for(int i = 1; i <= n; i++) scanf("%d", c + i);
f[0] = 1;
for(int i = 1; i <= n; i++)
for(int j = N - 1; j > 0; j--)
for(int k = 1; k <= K[i] && k * c[i] <= j; k++)
f[j] = max(f[j], 1ll * f[j - k * c[i]] * k);
for(int i = 1; i < N; i++)
if(f[i] >= m) return printf("%d\n",i), 0;
}
简易的代码胜过复杂的说教。
标签:
动态规划
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现