F. Magic Will Save the World(DP)

Problem - F - Codeforces

黑暗势力的传送门在世界边界打开了,现在整个世界都面临着可怕的威胁。为了关闭传送门并拯救世界,你需要一个接一个地击败n个从传送门中出现的怪物。

只有女巫Vika能够应对这个威胁。她有两个魔法力量——水之魔法和火之魔法。Vika每秒可以生成w单位的水魔法能量和f单位的火魔法能量。她需要能量来施放法术。初始时,Vika没有水魔法和火魔法能量。

从传送门中出现的每个怪物都有自己的力量,用一个正整数表示。为了击败第i个力量为si的怪物,Vika需要施放一个至少具有相同力量的水系或火系法术。换句话说,Vika可以花费至少si单位的水魔法能量来施放水系法术,或者至少si单位的火魔法能量来施放火系法术。

Vika可以立即创建和施放法术。只要她有足够的能量,她可以每秒施放无数次法术。

女巫希望尽快拯救世界,因此告诉她需要多少时间。

输入

每个测试包含多个测试用例。每个测试的第一行包含一个整数t(1≤t≤100),表示测试用例的数量。接下来是每个测试用例的描述。

每个测试用例的第一行包含两个整数w和f(1≤w,f≤109),表示Vika每秒可以生成的水魔法和火魔法能量。

每个测试用例的第二行包含一个整数n(1≤n≤100),表示怪物的数量。

每个测试用例的第三行包含n个整数s1,s2,s3,…,sn(1≤si≤104),表示怪物的力量。

保证所有测试用例中n的总和不超过100。

输出

对于每个测试用例,输出一个整数,表示Vika击败所有怪物所需的最短时间(秒)。

Example

Input

Copy

 

4

2 3

3

2 6 7

37 58

1

93

190 90

2

23 97

13 4

4

10 10 2 45

Output

Copy

3
2
1
5

题解:

我们可以dp求出在魔法为i时,是否可以全部利用为i的魔法

只有这种情况才能求出最优解,

总共需要的魔法量为sum为怪物生命值的总和

根据数据范围,sum最大为1e6

当i = 0~1e6,并且此时魔法可以完全被利用

会有两种情况,

f利用i,w利用sum - i 两者所用t取最大

同理或者w利用i,f利用sum - i

所有最优情况再取最小即可

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int,int> PII;
const int N = 5e5 + 10;
int a[N];
int dp[N*2];
void solve()
{int n,w,f;cin >> w >> f >> n;int sum = 0;for(int i = 1;i <= n;i++){cin >> a[i];sum += a[i];}memset(dp,0,sizeof dp);dp[0] = 1;for(int i = 1;i <= n;i++){for(int j = 1e6;j >= a[i];j --){dp[j] |= dp[j - a[i]];}}int ans = 1e9;for(int i = 0;i <= 1e6;i++){if(dp[i]){ans = min(ans,max((i + w - 1)/w,(sum - i + f - 1)/f));ans = min(ans,max((i + f - 1)/f,(sum - i + w - 1)/w));}}cout << ans <<"\n";
} 
//
signed main()
{int t = 1;ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> t ;	while(t--){solve();}
}
//70 30 90
//100 90

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/108048.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java学习之--类和对象

&#x1f495;粗缯大布裹生涯&#xff0c;腹有诗书气自华&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;Java学习之--类和对象 类和对象 类的实例化&#xff1a; 1.什么叫做类的实例化 利用类创建一个具体的对象就叫做类的实例化&#xff01; 当我们创建了…

数据在内存中的存储——练习3

题目&#xff1a; 3.1 #include <stdio.h> int main() {char a -128;printf("%u\n",a);return 0; }3.2 #include <stdio.h> int main() {char a 128;printf("%u\n",a);return 0; }思路分析&#xff1a; 首先二者极其相似%u是无符号格式进行…

Qt点亮I.MX6U开发板的一个LED

本篇开始将会介绍与开发版相关的Qt项目&#xff0c;首先从点亮一个LED开始。I.MX6U和STM32MP157的相关信息都会用到&#xff0c;但是后期还是将I.MX6U的学习作为重点。当然其他开发版的开发也可以参考本博文。 文章目录 1. Qt是如何操控开发板上的一个LED2. 出厂内核设备树中注…

C++面试/笔试准备,资料汇总

文章目录 后端太卷&#xff0c;建议往嵌入式&#xff0c;qt&#xff0c;测试&#xff0c;音视频&#xff0c;C一些细分领域投简历。有任何疑问评论区聊&#xff0c;我看到了回复 C面试/笔试准备&#xff0c;资料汇总自我介绍项目实习尽可能有1.编程语言&#xff1a;一.熟悉C语言…

interview3-微服务与MQ

一、SpringCloud篇 &#xff08;1&#xff09;服务注册 常见的注册中心&#xff1a;eureka、nacos、zookeeper eureka做服务注册中心&#xff1a; 服务注册&#xff1a;服务提供者需要把自己的信息注册到eureka&#xff0c;由eureka来保存这些信息&#xff0c;比如服务名称、…

UMA 2 - Unity Multipurpose Avatar☀️八.UMA内置实用Recipes插件

文章目录 🟥 UMA内置Recipes位置🟧 CapsuleCollider🟨 Expressions : 表情管理(重点)🟩 Locomotion : 移动测试的插件🟦 Physics : Collider升级版🟥 UMA内置Recipes位置 如下图所示,UMA共内置5种实用Recipes,文件夹内的Text Recipes类型的文件即是实用Recipes. …

【Unity3D】UI Toolkit数据动态绑定

1 前言 本文将实现 cvs 表格数据与 UI Toolkit 元素的动态绑定。 如果读者对 UI Toolkit 不是太了解&#xff0c;可以参考以下内容。 UI Toolkit简介UI Toolkit容器UI Toolkit元素UI Toolkit样式选择器UI Toolkit自定义元素 本文完整资源见→UI Toolkit数据动态绑定。 2 数据…

科学中的人工智能:量子、原子和连续体技术概述

人工智能&#xff08;AI&#xff09;的进步正在推动自然科学领域的一种新的发现范式。如今&#xff0c;AI已经开始通过改进、加速和促进我们对各种空间和时间尺度上自然现象的理解来推动自然科学的发展&#xff0c;催生了一个被称为AI for science&#xff08;AI4Science&#…

VMware虚拟机安装运行MacOS系统

VMware虚拟机安装运行MacOS系统 1. VMware虚拟机安装运行MacOS系统1.1. 前期准备 2. 解锁虚拟机MacOS2.1. 解锁后效果 3. 开始安装MacOS系统3.1. 选择系统3.2. 虚拟机磁盘3.3. 镜像 4. 开机配置4.1. MacOS图标4.2. 磁盘4.2.1. 磁盘配置4.2.2. 抹掉数据 4.3. 安装系统4.3.1. 安装…

算法-27.移除元素-⭐

给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面…

2022年09月 C/C++(八级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:道路 N个以 1 … N 标号的城市通过单向的道路相连:。每条道路包含两个参数:道路的长度和需要为该路付的通行费(以金币的数目来表示) Bob and Alice 过去住在城市 1.在注意到Alice在他们过去喜欢玩的纸牌游戏中作弊后,Bob和她分手…

UG\NX二次开发 选择基准平面 UF_UI_select_with_single_dialog

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: 使用UF_UI_select_with_single_dialog函数,选择基准平面。 效果: 代码: #include "me.hpp"//过滤 基准平面 UF_datum_plane_type int InitProcDa…