City Savers c++

描述

有 N+1 个城镇。其中 i 个城镇正受到 Ai​ 个怪物的攻击。

我们有 N 个英雄。第i个英雄可以打败攻击第i个或第(i+1)个城镇的怪物,总共最多可以打败Bi​个怪物。

英雄们最多可以合作打败的怪物总数是多少?

输入描述

N
A1​ A2​ ... AN+1​
B1​ B2​ ... BN​

输出描述

打印英雄能打败的怪物总数上限。

用例输入 1 

2
3 5 2
4 5

用例输出 1 

9

用例输入 2 

3
5 6 3 8
5 100 8

用例输出 2 

22

用例输入 3 

2
100 1 1
1 100

用例输出 3 

3

提示

样本输出 1

如果英雄们按以下方式选择要打败的怪物,他们总共可以打败九个怪物,这是最大结果。

  • 第一位英雄打败攻击第一个城镇的两只怪物和攻击第二个城镇的两只怪物。
  • 第二位英雄击败攻击第二座城镇的三只怪物和攻击第三座城镇的两只怪物。

限制因素

  • 所有输入值均为整数。
  • 1≤N≤105
  • 1≤Ai​≤109
  • 1≤Bi​≤109

解析:

这段代码主要解决了一个与英雄和怪物有关的问题。在这个问题中,有N+1个城镇,每个城镇受到一定数量的怪物攻击。同时,有N个英雄,每个英雄可以打败攻击其对应城镇或下一个城镇的怪物,但每个英雄有一个打败怪物的数量上限。目标是找出英雄们最多可以合作打败的怪物总数。

代码:

#include<bits/stdc++.h>  
using namespace std;  
  
// 定义常数N,表示城镇和英雄的数量上限  
const int N = 10000007;  
  
// 定义全局变量  
int n;            // 城镇数量(实际上英雄数量是n,因为有一个额外的城镇)  
long long c;      // 用来记录英雄们最多可以合作打败的怪物总数  
int a[N], b[N];   // a[i]表示第i个城镇受到的攻击怪物数量,b[i]表示第i个英雄可以打败的怪物数量上限  
  
int main()  
{  
    cin >> n;        // 读取城镇数量(或英雄数量)  
      
    // 读取每个城镇受到的攻击怪物数量  
    for(int i = 1; i <= n + 1; i++) cin >> a[i];  
      
    // 读取每个英雄可以打败的怪物数量上限  
    for(int i = 1; i <= n; i++) cin >> b[i];  
      
    // 遍历每个英雄  
    for(int i = 1; i <= n; i++)  
    {  
        // 如果当前英雄可以打败的怪物数量大于第i个城镇受到的攻击怪物数量  
        if(b[i] > a[i])  
        {  
            // 当前英雄首先打败第i个城镇的所有怪物  
            b[i] -= a[i];  
            c += a[i];  
              
            // 当前英雄如果还有剩余的打败能力,尝试打败第i+1个城镇的部分怪物  
            // 注意:使用min函数确保不超过英雄剩余的打败能力和第i+1个城镇受到的怪物数量  
            c += min(a[i + 1], b[i]);  
              
            // 更新第i+1个城镇剩余的怪物数量  
            a[i + 1] -= min(a[i + 1], b[i]);  
        }  
        // 如果当前英雄可以打败的怪物数量小于或等于第i个城镇受到的攻击怪物数量  
        else  
        {  
            // 当前英雄只能打败其对应的第i个城镇的部分或全部怪物  
            c += b[i];  
              
            // 由于当前英雄不能打败第i+1个城镇的怪物,所以不需要更新a[i+1]  
        }  
          
        // // 调试用,输出当前c的值  
        // cout << c << endl;  
    }  
      
    // 输出英雄们最多可以合作打败的怪物总数  
    cout << c << endl;  
      
    return 0;  
}

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想在YOLOv5中替换C3模块,需要在train.py中进行以下修改: 1. 导入新的模块。你需要在train.py的开头添加以下导入语句: ```python from models.yolo import Model, C3 ``` 2. 替换C3模块。在Model类的构造函数中,将原来的C3模块替换为新的模块,如下所示: ```python class Model(nn.Module): def __init__(self, cfg='yolov5s.yaml', ch=3, nc=None, anchors=None): super(Model, self).__init__() self.nc = nc # number of classes self.no = nc + 5 # number of outputs per anchor self.na = len(anchors[0]) // 2 # number of anchors self.ng = 3 # number of grid points self.nf = (self.no * self.na) # number of features per grid self.se = [] # stage encoders self.sa = [] # stage aggregators # Define model self.model, self.save = parse_model(deepcopy(cfg), ch=[ch]*3) # model, savers self.model[-1].conv = nn.Conv2d(in_channels=self.model[-1].conv.in_channels, out_channels=self.nf, kernel_size=self.model[-1].conv.kernel_size, stride=self.model[-1].conv.stride, padding=self.model[-1].conv.padding, bias=True) # replace conv2d # Define C3 module self.C3 = C3(512, 256, n=3) # Define yolo head self.heads = nn.ModuleList([nn.Conv2d(256, self.nf, 1) for _ in range(3)]) # output layers ``` 3. 修改forward函数。在forward函数中,将原来的C3模块替换为新的模块,如下所示: ```python def forward(self, x): x = self.model[0](x) # stem x = self.model[1](x) # stage 1 x = self.model[2](x) # stage 2 x = self.C3(x) # replace C3 module x = self.model[4](x) # stage 4 x = self.model[5](x) # stage 5 x = self.heads[0](x) y0 = x.clone() # for inference x = self.model[6](x) # stage 6 x = self.heads[1](x) y1 = x.clone() # for inference x = self.model[7](x) # stage 7 x = self.heads[2](x) y2 = x.clone() # for inference if self.training: return self.loss([y0, y1, y2], targets) # train else: return [y0, y1, y2] # inference ``` 这些修改将帮助你在YOLOv5中替换C3模块。注意,这只是一种例子,实际修改可能因模型架构和实现方式而异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值