Naptime POJ - 2228(环形dp处理)

环形DP 环形DP   在给定数据是环形数组时,我们求解时要将环形变化为线性数组求解,这里有两种常用的变换方式,下面通过例题给出。 例题1   通过对某些特殊位置进行不同初始化,多次DP求解最优解。   休息时间 //环形DP //通过一定的手段将环形DP转化为线性DP的问题 //本题通过两次DP和错位补充的手段来解决问题 #include<bits/stdc++.h> using namespace std; int main(){ int n; int b; scanf("% 阅读详情

Goneril is a very sleep-deprived cow. Her day is partitioned into N (3 <= N <= 3,830) equal time periods but she can spend only B (2 <= B < N) not necessarily contiguous periods in bed. Due to her bovine hormone levels, each period has its own utility U_i (0 <= U_i <= 200,000), which is the amount of rest derived from sleeping during that period. These utility values are fixed and are independent of what Goneril chooses to do, including when she decides to be in bed.

With the help of her alarm clock, she can choose exactly which periods to spend in bed and which periods to spend doing more critical items such as writing papers or watching baseball. However, she can only get in or out of bed on the boundaries of a period.

She wants to choose her sleeping periods to maximize the sum of the utilities over the periods during which she is in bed. Unfortunately, every time she climbs in bed, she has to spend the first period falling asleep and gets no sleep utility from that period.

The periods wrap around in a circle; if Goneril spends both periods N and 1 in bed, then she does get sleep utility out of period 1.

What is the maximum total sleep utility Goneril can achieve?
Input
* Line 1: Two space-separated integers: N and B

  • Lines 2..N+1: Line i+1 contains a single integer, U_i, between 0 and 200,000 inclusive
    Output
    The day is divided into 5 periods, with utilities 2, 0, 3, 1, 4 in that order. Goneril must pick 3 periods.
    Sample Input
    5 3
    2
    0
    3
    1
    4
    Sample Output
    6
    Hint
    INPUT DETAILS:

The day is divided into 5 periods, with utilities 2, 0, 3, 1, 4 in that order. Goneril must pick 3 periods.

OUTPUT DETAILS:

Goneril can get total utility 6 by being in bed during periods 4, 5, and 1, with utilities 0 [getting to sleep], 4, and 2 respectively.

思路:首相这个结构是环形的,环形有许多的处理方法,针对具体的题目而言,我们可以先把他变成一个线性dp,及从1到n的线性dp
状态定义:
F[i][[j][0]表示前i个小时休息了j小时且第i小时不休息的获得能力的最大值。
F[i][[j][1]表示前i个小时休息了j小时且第i小时休息的获得能力的最大值。
初值F[1][1][0]=F[1][1][1]=0,其他均为负无穷(负无穷即为不合法)
状态转移方程:
F[i][[j][[0]=max(f[i−1][j][0],f[i−1][j][1])
F[i][[j][[1]=max(f[i−1][j−1][0],f[i−1][j−1][1]+Ui)
目标max(F[n][b][0],F[n][b][1])
可以发现这种转移,从来没有考虑把U1纳入考虑范围
那么我们假设U1会作为最终答案的贡献,那么最终第n的时候,也必须休息所以
那么我们只要把初值F[1][1][1]=U1,其他均为负无穷(包括F[1][1][0],因为在这种设定下,这种状态是不合法的),再做一次dp.
目标F[n][b][1].
代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#define maxx 4000
using namespace std;
long long dp[2][maxx][2];
int a[maxx];
int n,m;
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    memset(dp,0xcf,sizeof(dp));
    dp[1][0][0]=dp[1][1][1]=0;
    for(int i=2;i<=n;i++)
    {
        for(int j=0;j<=m;j++)
        {
            dp[i&1][j][0]=max(dp[(i-1)&1][j][0],dp[(i-1)&1][j][1]);
            if(j)
                dp[i&1][j][1]=max(dp[(i-1)&1][j-1][0],dp[(i-1)&1][j-1][1]+a[i]);
        }
    }
    long long ans=max(dp[n&1][m][0],dp[n&1][m][1]);
    memset(dp,0xcf,sizeof(dp));
    dp[1][1][1]=a[1];
    for(int i=2;i<=n;i++)
    {
        for(int j=0;j<=m;j++)
        {
            dp[i&1][j][0]=max(dp[(i-1)&1][j][0],dp[(i-1)&1][j][1]);
            if(j)
                dp[i&1][j][1]=max(dp[(i-1)&1][j-1][0],dp[(i-1)&1][j-1][1]+a[i]);
        }
    }
    ans=max(ans,dp[n&1][m][1]);
    cout<<ans<<endl;
    return 0;
}
AlphaFold2算法详解 正文:https://www.nature.com/articles/s41586-021-03819-2 补充文件:https://static-content.springer.com/esm/art%3A10.1038%2Fs41586-021-03819-2/MediaObjects/41586_2021_3819_MOESM1_ESM.pdfhttps://static-content.springer.com/esm/art%3A10.1038%2Fs41586-021-03819-2/Med 阅读详情

相关推荐

SECS/GSM 测试工具 SecsExpress 的配置与实战应用

本文详细介绍了半导体设备通讯测试工具SecsExpress的配置与实战应用。作为专业的SECS/GSM协议调试工具,它能模拟Host与设备端进行双向测试,帮助工程师快速部署、验证通讯链路,并高效排查与RMS系统或真实设备间的联调问题,是提升半导体工厂设备集成与维护效率的利器。

yhn456789的博客 298

动态规划(4)区间dp

简单区间dp

weixin_64197656的博客 975

MTK MT6833平台屏幕与TP驱动移植实战:从FAE伪代码到内核模块集成

本文详细介绍了在MTK MT6833平台上进行屏幕与TP驱动移植的完整实战流程。文章从解析供应商提供的初始化伪代码入手,逐步拆解了在LK阶段点亮屏幕、在内核层集成Panel驱动以支持休眠唤醒,以及移植并调试sitronix_ts触摸驱动的核心步骤与关键技巧,为嵌入式开发人员提供了从零到一集成新硬件的清晰指南。

rnn9storyteller的博客 441

c++动态规划4——环形动态规划

根据环形dp的经典例题,对环形dp的解题思想进行详细分析

overload100的博客 1272

避坑指南:Vue调用摄像头常见6大报错解决方案(navigator.mediaDevices全兼容方案)

本文深入剖析了在Vue应用中调用摄像头时常见的六大报错,如权限拒绝、设备未找到等,并提供了基于navigator.mediaDevices的全兼容解决方案。内容涵盖从HTTPS环境配置、浏览器兼容性处理到摄像头资源管理与高级错误处理,旨在帮助开发者构建稳定可靠的企业级摄像头应用。

Black的专栏 340

笔记本电脑更换主板后出现2203:System configuration is invalid,以及2201、2202系统错误的解决

主板更换后刷新S/N

晓夏IT笔记 3519

线性区间 dp 与环形区间 dp

区间dp就是在区间上进行动态规划,求解一段区间上的最优解;该问题的求解思路主要是通过合并小区间的最优解进而得出整个大区间上最优解的dp算法。(实际上还是通过子问题的解来求出原问题的解)

oscar1224的博客 2316

大模型安全-生成检测-事实核查-攻击-防御-思考-记忆-融合-语音相关研究 2025年版

本文整理了关于大模型安全领域的综合性资源,包括7篇综述论文、9个安全数据集以及5篇强化学习相关的安全研究论文。主要涉及大模型的对抗攻击、隐私保护、安全评估等方向,涵盖TruthfulQA、ToxiGen等知名数据集和TrustLLM、HarmBench等关键研究。资源包括知乎博主分享、arXiv预印本和顶会论文,并附有详细的中文讲解链接,为研究者提供了系统性的安全研究参考。

CSPhD-winston的博客 3590

环形dp处理

1.断环为链 思路:将一个环复制一倍成为一条链,最终答案为w[i]~w[i+n]一段上的结果 石子合并: 如果是一条链,考虑区间dp,dp[i][j]指i~j一段的值,每次枚举中间点来得到答案 因为是一个环,将w复制到原来的后面做dp,最后答案是max(dp[i][i+n]) 环路运输: 复制处理环上问题,然后可以发现: 就是 用单调队列维护每一段w[j]-j的值,最后答案就是队首的值+w[i]+i q.push(make_pair(1,w[i])); for(int i=2;i

hungry1234的博客 1454

PINN驱动的3D不可压缩流场重建——从稀疏2D2C观测到完整物理场反演——含源码实现

多尺度融合策略在此发挥作用:高分辨率的2D2C数据用于约束平面内的精细结构,而低分辨率的3D3C数据提供第三维度的粗尺度信息。迁移学习架构在此发挥关键作用。这种策略在湍流封闭模型构建中尤为有效,其中RANS提供的平均流场与DNS的雷诺应力数据融合,显著提升了分离流的预测精度。在稀疏数据场景下,注意力权重根据观测数据的分布动态调整,强化数据缺失区域的物理约束,同时避免过拟合于观测点。这种机制与自适应采样的结合,实现了计算效率与重建精度的平衡,在仅保留约百分之十关键节点的情况下,仍能保持高物理一致性。

u012133341的博客 136

Android 9.0 延时开机动画解决首次开机黑屏和去掉android正在启动的提示框

在9.0的系统产品rom定制化开发中,在一些产品中会出现在首次开机的时候,由于在开机动画播放完以后会出现几秒短暂的黑屏情况,然后进入默认Launcher,这在产品体验上 也是感觉到有点差,所以会要求在去掉这个首次开机黑屏的效果,和在启动过程中的 android is starting这个提示框的这些效果优化,接下来就分析下相关功能, 然后实现这个功能的开发

安卓兼职framework和app工程师的博客 3245

【题解】poj2228 Naptime 线性DP+环形处理

题目链接 Description Goneril is a very sleep-deprived cow. Her day is partitioned into N (3 &lt;= N &lt;= 3,830) equal time periods but she can spend only B (2 &lt;= B &lt; N) not necessarily contiguous p...

翻过这座山,他们就会听到你的故事 666

JAVA:Spring Boot 集成 Atomikos 实现分布式事务

摘要: Atomikos是一款基于JTA标准的分布式事务协调器,通过两阶段提交(2PC)协议实现跨数据库/消息系统的事务一致性,适用于金融等高要求场景。本文以Spring Boot集成Atomikos为例,演示多数据源(订单库、库存库)的分布式事务管理。核心步骤包括:引入Atomikos依赖、配置XA数据源、设置两阶段提交的MyBatis多数据源,并通过Atomikos协调全局事务,确保跨库操作原子性。代码示例涵盖配置类、YAML定义及MySQL XA数据源初始化,为分布式系统提供强一致性解决方案。

木头 334

POJ 2228 Naptime(DP+环形处理)

题解 这题一眼望去DP。 发现自己太智障了。 这题想的是O(n^3m)的。 环形处理只会断环成链。。。。然后DP也想的不好。 我们先考虑如果除去环这题该怎么做? dp[i][j][0/1]代表到第i小时睡了j个小时,第i小时睡了/没睡权值最大值。 初值 dp[1][1][1]=dp[1][0][0]=0;dp[i][0][0]=0;其余都是负无穷。 转移 dp[i][...

Aaronliu17008的博客 258

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【poj 2228】 poj 2228 Naptime dp 环形dp的特殊处理

【poj 2228】 poj 2228 Naptime dp 环形dp的特殊处理

pbihao的博客 1132

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

环形结构上的动态规划问题的两种基本处理方式:

一、 执行两次DP,第一次在任意位置把环断开成链,按照线性问题求解。 第二次通过适当的条件和赋值,保证计算的状态等价于把断开的位置强制相连。 Naptime POJ - 2228: Goneril is a very sleep-deprived cow. Her day is partitioned into N (3 <= N <= 3,830) equal time period...

_Griefs 672

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

poj 2228 Naptime dp

这个题目的状态还是比较好想的,dp[i][j]表示已经睡了i个时段,最后睡在j时段的最优值,但是需要处理环的情况,我的做法是算两次,第一次不处理环,第二次强制性要求第一个时段需要睡,然后查看dp[m][n]+a[1]的值是否更优。 #include #include #include using namespace std; const int maxn=4e3+9; int a[maxn

yrleep的专栏 1404

POJ 2228 Naptime (DP) #by Plato

http://poj.org/problem?id=2228 题意:从N个元素(环形队列)中选出B个,求最大得分。(元素得分仅当其前面的元素也被选择了) Shine:分类讨论的思想,边界处理 Idea; 假如是线性队列的话,Dp方程很容易写出: f[i][j][1] = max{f[i-1][j-1][1] + U[i],f[i-1][j-1][0]} f[i][j][0] = m

XDU_Truth的专栏 1452

Naptime 【POJ - 2228】

题目链接 题目大意 有一只牛要休息m个时间段,现在有n个时间段可以供选择,一个时间段有一个睡眠价值,这m个时间段可以连续也可以不连续,每次睡觉的第一个时间段时不获得睡眠价值的,这个牛可以从第一天的晚上睡到第二天的早上,也就是第n个时间段是连着第一个时间段的。问这个牛可以获得的最大的睡眠价值是多少? 解题思路 我们先不考虑环形的问题,如果他就是一个正常的线性dp的话,我们设dp[i][j][0]表示...

qq_41925919的博客 410

【POJ2228】Naptime

关于环形dp的处理,我采用的办法是,把整个问题分成两个问题。 首先我们简化一下问题,假设这个问题不是环形的,那么我们定义f[i][j][1]表示前i个小时休息了j小时,且第i小时正在休息,获得的体力最大值。定义f[i][j][0]表示前i个小时休息了j小时,且第i小时不在休息,获得的体力最大值。显然有f[i][j][0]=max(f[i-1][j][1],f[i-1][j][0]),f[i][j...

weixin_30455365的博客 245

POJ 2228 Naptime 环形DP

参考 https://blog.youkuaiyun.com/qq_41925919/article/details/90267224 dp[i][j][0]:前i个时间间隔中,已经花费了j个间隔,取得的最大值,并且第i个间隔在休息 dp[i][j][1]:前i个时间间隔中,已经花费了j个间隔,取得的最大值,并且第i个间隔不休息 因为 #include <iostream> #include &l...

DUT_LYH 527

poj 2228 Naptime(DP的后效性处理)

\(Naptime\) 描述 Goneril是一只睡眠不足的母牛。她的一天被划分为N(3 <= N <= 3,830)相等的时间段,但她只能在床上花费B(2 <= B <N)不一定是连续的时期。由于她的牛激素水平,每个时期都有自己的效用U_i(0 <= U_i <= 200,000),这是在此期间从睡眠中获得的休息量。这些效用值是固定的,与Goneril选择做的...

weixin_30416497的博客 226

POJ2228-Naptime【环形结构上的dp】

正题 题目链接:http://poj.org/problem?id=2228 题目大意 有一个环,选择一段长度为n进行计算。如果第i个时间点选择不睡觉那么就会增加aiaia_i。你也可以选择睡觉,第一个时间点不算,睡觉时间至少为m。 解题思路 我们可以分为两种情况,就是会经过1和N,和不会经过1和N。 不会经过1和N的话那么我们直接进行线性dp。 然后如果1和N连起来...

QuantAsk 811

POJ 2228 Naptime 环形DP+滚动数组优化

Descrition   在某个星球上,一天由 N 个小时构成,我们称0点到1点为第1个小时、1点到2点为第2个小时,以此类推。在第 i 个小时睡觉能够恢复UiUi点体力。在这个星球上住着一头牛,它每天要休息B个小时。它休息的这B个小时不一定连续,可以分成若干段,但是在每段的第一个小时,它需要从清醒逐渐入睡,不能恢复体力,从下一个小时开始才能睡着。   为了身体健康,这头牛希望遵循生物钟,每天采用...

qq_43627100的博客 224

POJ 2228 naptime

环形DP 先考虑如果只是一天,我们可以用线性DP写出转移方程,注意初始化 如果是一个环的话,我们发现少了一种第n天和第一天连起来的情况,那么我们就再进行一次DP 强制这种情况 #include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #includ...

144

poj2228 Naptime 题解报告

题目传送门 【题目大意】 一天由$n$个小时构成,在第$i$个小时睡觉能够恢复$U_i$点体力。有一头牛要休息$b$个小时,可以不连续,但休息的第1个小时无法恢复体力。前一天的最后一个小时和第二天的第一个小时是连在一起的,求这头牛能恢复的体力最大值。 【思路解析】 首先这是一个环形DP问题,所以我们先简化问题,假设前一天的最后一个小时和第二天的第一个小时不是连在一起的,转化为线性问题来处理...

weixin_30388677的博客 109
上一篇: Yet Another Game of Stones ZOJ - 3964 (博弈)
下一篇: Leonardo's Notebook POJ - 3128(置换群的开方判断)
coldfresh
博客等级 码龄10年 107粉丝 405原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值