C. Three displays codeforces (dp)

本文介绍了解决C.Threedisplays问题的一种方法,通过动态规划分解问题为寻找递增序列并求最小和,提供了详细的算法思路及C++实现代码。
题目链接:C. Three displays
题意:给出一个n,接下来两行 每行n个数字,在第二行中找出三个数,下标i j k满足i
思路:

看到这个题,第一感觉就是dp
1.找长度为3的递增序列,那么可以分解成两个子问题i< j j< k
2.dp[2] [i] 表示第i个位置 时候所找到的一组i j满足对应的和最小
状态转移方程:dp[2][i]=min{dp[2][i],dp[1][j]+dp[1][i]};
3.dp[3][i]表示在2的基础上dp ,前i位组成三个数字,对应的最小和
状态转移方程:dp[3][i]=min{dp[3][i],dp[2][j]+dp[1][j]};

dp[1][j]是题目给的的s[j]

第二个方法(朋友提供):
可以遍历整个数组对每个数字进行计算,以当前位为中间,向左找一个最小的数,向右找一个最小的数,组成i j k ,遍历一遍 最小的值就是答案了

代码:

#include<iostream>
#include<algorithm>
using namespace std;
const long long INF=1e10;
long long dp[4][3005],s[30005];
int main()
{
    int n,i,j;
    cin>>n;
    for(i=1;i<=n;++i)
    cin>>s[i];
    for(i=1;i<=n;++i)
    cin>>dp[1][i];
    for(i=2;i<=n;++i)
    {
        dp[2][i]=INF;
        for(j=1;j<i;++j)
        {
            if(s[i]>s[j])
            {
                dp[2][i]=min(dp[2][i],dp[1][i]+dp[1][j]);
            }
        }
    }
    long long ans=INF;
    for(i=3;i<=n;++i)
    {
        dp[3][i]=INF;
        for(j=2;j<i;++j)
        {
            if(s[i]>s[j])
            {
                dp[3][i]=min(dp[3][i],dp[2][j]+dp[1][i]);
            }
        }
        if(ans>dp[3][i])ans=dp[3][i];
    }
    if(ans>=INF)cout<<-1;
    else cout<<ans;
    return 0;
}
代码 `self.update_graph_displays(0)` 通常是在面向对象编程的上下文中使用。这里的 `self` 代表类的实例对象本身,意味着该方法 `update_graph_displays` 是类的一个实例方法。 ### 含义 `update_graph_displays` 是一个自定义的方法名,从命名上推测,它可能用于更新图形显示。参数 `0` 传递给该方法,这个 `0` 可能有不同的含义,例如: - 可能是一个索引值,用于指定要更新的图形显示的特定索引。比如在一个包含多个图形显示区域的界面中,`0` 可能代表第一个图形显示区域。 - 也可能是一个标志位,用于指示更新的模式或者类型。例如 `0` 表示正常更新,`1` 表示强制更新等。 ### 使用场景 - **数据更新时**:当有新的数据到来,需要更新图形显示以反映最新的数据时,可以调用该方法。例如在一个实时监控系统中,每隔一段时间获取到新的传感器数据,就可以调用 `self.update_graph_displays(0)` 来更新对应的图形展示。 - **界面初始化时**:在界面创建完成后,需要初始化图形显示的状态,也可以使用这个方法。例如在一个数据分析软件启动时,调用该方法来显示初始的图形。 ### 可能存在的问题 - **参数含义不明确**:如果 `0` 的含义没有在代码注释或者文档中明确说明,后续维护人员可能不清楚这个参数的具体作用,增加了理解和修改代码的难度。 - **方法实现错误**:如果 `update_graph_displays` 方法的实现有问题,例如在更新图形显示时出现逻辑错误,可能会导致图形显示异常,如显示空白、显示错误的数据等。 - **性能问题**:如果该方法的实现涉及大量的计算或者资源操作,频繁调用可能会导致性能下降,影响系统的响应速度。 以下是一个简单的示例代码,展示了 `self.update_graph_displays(0)` 可能的使用场景: ```python class GraphDisplayManager: def __init__(self): # 模拟图形显示区域 self.graph_displays = [None] * 5 def update_graph_displays(self, index): if 0 <= index < len(self.graph_displays): # 模拟更新图形显示 self.graph_displays[index] = f"Updated Graph at index {index}" print(f"Graph at index {index} has been updated.") else: print("Invalid index.") # 创建实例 manager = GraphDisplayManager() # 调用方法更新图形显示 manager.update_graph_displays(0) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值