首页 > 其他分享 >LuoguP1717 钓鱼

LuoguP1717 钓鱼

时间:2023-08-13 23:00:31浏览次数:51  
标签:bullet 钓鱼 int fish pos tim LuoguP1717 dp

题面

题目分析

动态规划。

\(\bullet\) 设计状态。
思考:我从哪里来?从上一个湖过来。
我到哪里去?到下一个湖去 \(or\) 继续在这个湖钓鱼。
设 \(dp[pos][tim]\) 为前 \(pos\) 个湖花费了 \(tim\) 分钟所能钓的最大的鱼数量。

\(\bullet\) 转移状态。(为了方便计算,我们将题目中的数据全部除以 \(5\),结果不变。)
\(c\) 表示已经在当前第 \(pos\) 个湖停留钓鱼了 \(c\) 分钟。
\(fish[i]\) 表示第 \(i\) 个湖最多钓的鱼。
\(t\) \(d\) 含义同原题题面的解释。

转移方程:\(dp[pos][tim]=max(dp[pos-1][tim-t[pos-1]-c]+\sum_{i=0}^{c-1}(fish[pos]-i*d[pos]))\)
为了方便计算,我们将这个式子用等差数列求和公式展开后半部分。
即:\(dp[pos][tim]=max(dp[pos-1][tim-t[pos-1]-c]+c*(fish[pos]+fish[pos]-(c-1)*d[pos])/2)\)

解释含义:\(tim-t[pos-1]-c\) 表式上一个湖结束钓鱼时已花费的时间。(当前时间-从上个湖到当前湖花费的时间-当前湖已经花费的时间。)

代码

依题意枚举 \(pos\) \(tim\) \(c\)。

注意:
\(\bullet\) 注意含有减法下标的越界情况。
\(\bullet\) 若 \(dp[pos-1][tim-t[pos-1]-c]\) 还没赋值,continue
\(\bullet\) 若当前能获得的鱼 \(<=0\),continue

代码实现:

#include <bits/stdc++.h>
#define int long long
const int N = 10005;
using namespace std;
inline int read(){
    int r = 0,w = 1;
    char c = getchar();
    while (c < '0' || c > '9'){
        if (c == '-'){
            w = -1;
        }
        c = getchar();
    }
    while (c >= '0' && c <= '9'){
        r = (r << 3) + (r << 1) + (c ^ 48);
        c = getchar();
    }
    return r * w;
}
int n,h,fish[N],d[N],t[N];
int dp[105][N];
signed main(){
    n = read(),h = read();
    h *= 12;
    for (int i = 1;i <= n;i++){
        fish[i] = read();
    }
    for (int i = 1;i <= n;i++){
        d[i] = read();
    }
    for (int i = 1;i <= n - 1;i++){
        t[i] = read();
    }
    int ans = -1;
    memset(dp,-1,sizeof(dp));
    dp[0][0] = 0;
    for (int pos = 1;pos <= n;pos++){
    	for (int tim = 0;tim <= h;tim++){
    		for (int c = 0;tim - t[pos - 1] - c >= 0;c++){
    			if (dp[pos - 1][tim - t[pos - 1] - c] != -1 && fish[pos] - (c - 1) * d[pos] > 0){
    				dp[pos][tim] = max(dp[pos][tim],dp[pos - 1][tim - t[pos - 1] - c] + c * (fish[pos] + fish[pos] - (c - 1) * d[pos]) / 2);
    				ans = max(ans,dp[pos][tim]);
				}
			}
		}
	}
	printf("%lld",ans);
    return 0;
}

标签:bullet,钓鱼,int,fish,pos,tim,LuoguP1717,dp
From: https://www.cnblogs.com/WiuehPlus/p/17627479.html

相关文章

  • 邮件钓鱼之sendcloud邮件伪造
    0x00整体流程找一个未被加入到黑名单的可提供SMTP协议发件的网站,如smtp2go,sendcloud安装邮件伪造工具swaks制作钓鱼邮件内容eml文件及多种情况发送伪造邮件0x01邮件服务sendcloud本文以sendcloud为例,地址:https://www.sendcloud.net首先进行注册,注册后找到我们需要的东......
  • 一款专门针对高质量女性的易语言钓鱼样本简单分析
    由于一直没怎么分析过易语言的样本,想学习一下易语言的样本分析过程,正好最近碰见了一个易语言编写的样本,是一个专门针对人类高质量女性进行钓鱼的样本,正好拿来学习学习,笔者是一边学习一边分析,如有不对之处还望各位批评指正。该样本图标如下:好像和前段时间流行的某人类高质量男性留着......
  • 【渗透测试】Cobalt Strike制作钓鱼邮件渗透Windows
    目标在kali中使用CobaltStrike制作钓鱼邮件,对Windows进行渗透机器环境kali(服务端):192.168.175.129win11(攻击机):192.168.175.128win11(靶机):192.168.175.137步骤一、安装CobaltStrike将压缩包解压unrarx./CobaltStrike4_8_lusuo.rar若要解压到指定路径,先新建......
  • 客户案例:如何让企业员工远离网络钓鱼邮件陷阱?
    客户背景某大型餐饮企业是一家在全国范围内拥有多家连锁店的知名品牌,以优秀的产品和服务质量,严格的质量控制和管理体系,以及开创性的营销策略,赢得了广泛的客户认可和信任。而餐饮企业往往拥有多个分支机构和门店,员工数量较多且流动性大,二次认证等账号保护手段无法推行,此外员工安全意......
  • 不要点击那个ZIP文件! 钓鱼者利用.ZIP域名来欺骗受害者
    一种名为"浏览器中的文件存档器"的新的网络钓鱼技术可以被利用,当受害者访问一个.ZIP域时,在网络浏览器中"模拟"一个文件存档器软件。"安全研究员mr.d0x上周披露:"通过这种网络钓鱼攻击,你在浏览器中模拟一个文件存档软件(例如WinRAR),并使用一个.zip域名,使其看起来更合法。简而言之,威......
  • 某大型啤酒企业:构建网络安全软实力,首选Coremail反钓鱼演练
    客户背景某大型啤酒厂商的公司规模和市场份额多年来始终都处于行业领先地位,积极赞助多项体育赛事,持续丰富和提升品牌形象。作为一家具有全球影响力的企业,自然也成为了全球黑客等攻击团伙的重点目标,而系统攻击的开端便是钓鱼邮件,而网络安全不仅硬件防护做到位,软实力也更要跟上。员工......
  • 数据分享|R语言零膨胀泊松回归ZERO-INFLATED POISSON(ZIP)模型分析露营钓鱼数据实例估计
    全文链接:http://tecdat.cn/?p=26915最近我们被客户要求撰写关于零膨胀泊松回归的研究报告,包括一些图形和统计输出。零膨胀泊松回归用于对超过零计数的计数数据进行建模。此外,理论表明,多余的零点是通过与计数值不同的过程生成的,并且可以独立地对多余的零点进行建模。因此,zip模型......
  • 谷歌TAG警告说俄罗斯黑客在乌克兰进行网络钓鱼攻击
    与俄罗斯军事情报机构有关的精英黑客与针对乌克兰数百名用户的大批量网络钓鱼活动有关,以提取情报并影响与战争有关的公共言论。谷歌的威胁分析小组(TAG)正在监测这个名为FROZENLAKE的行为者的活动,该小组表示,这些攻击继续"该小组2022年的重点是针对东欧的网络邮件用户"。这个国家支持......
  • 常见的5种网络钓鱼攻击类型及防御措施!
    网络钓鱼攻击是比较常见且人人熟知的一种攻击方式,虽然这种攻击方式不是以入侵为主要,但其危害范围极大,也是最严重的网络威胁之一。目前,网络钓鱼攻击类型有很多种,本文主要为大家介绍一下“常见的5种网络钓鱼攻击类型及防御”,一起来学习吧。一、欺骗性网络钓鱼欺骗性网络......
  • 使用setoolkit进行钓鱼网站的制作实训
    钓鱼网站的制作实训实训目的:通过实训掌握社会工程学工具包的使用方法。场景描述:社会工程学工具包(SET)是一个开源的、Python驱动的社会工程学渗透测试工具。这套工具包由......