Evolution Game【dp】

本文探讨了一个基于野兽形态变化的进化游戏,通过动态规划算法,分析了野兽在特定规则下能达到的最大变化次数,提供了完整的代码实现及思路解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         

问题C:进化游戏

时间限制: 1秒   内存限制: 128 MB 
提交: 309   解决: 58 
提交 ] [ 状态 ] [命题人:admin ]

题目描述

在ICPC的幻想世界中,有神奇的野兽。随着它们的成长,这些野兽可以改变形态,每次它们变得更强大。但野兽不能完全随意改变形态。在每种形式中,野兽都有n只眼睛和k角,这些影响它可以做出的变化。  野兽只能变成比现在更多的角。 野兽只能变成最多只有眼睛差异的形态。因此,如果野兽目前有眼睛,它可以改变为眼睛在[n - w,n + w]范围内的形式。 
 


  
对于1到N之间的每个眼睛,野兽都有一种形式,这些形状也会有相应数量的角。野兽可以以任何形式出生。问题是,这些野兽之一变得多么强大?换句话说,在可能性消失之前,野兽会改变多少次? 

 

输入

第一行包含两个整数N和w,分别表示最大眼数和变化中允许的最大眼差(1≤N≤5000;0≤w≤N)。  
下一行包含N个整数,表示每种形式的喇叭数。即第i个数字,h(i),是我眼睛形状的角数(1≤h(i)≤1000 000)。 

 

输出

对于每个测试用例,显示包含最大可能更改次数的一行。 

 

样例输入

复制样例数据

5 2

1 2 2 2 7

样例输出

2

提示

从1个角和4个眼睛开始,它可以改变4次:( 1个角4个眼睛) - >(2个角3个眼睛) - >(3个角2个眼睛) - >(4个角5个眼睛) - >(5个角1只眼睛)。


题意:

        根据角的数量从小到大 “成长”,判断根据满足眼睛数量的一个区间上的最大次数

题解:

       根据动态规划的思想,从后往前更新最大值,找到所有节点中最大的那个变换次数

 

代码:

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<set>
const double PI=acos(-1);
typedef long long ll;
const int INF=1e9+7;
const int xmax=2e6+10007;
const int xmin=-1e6+7;
using namespace std;
int ans=-1;
int tmp;
int l,r;
int n,w;
struct node
{
    int e;
    int h;
    int len;    ///存每个结点的最大变换次数
} b[151007];
bool cmp(node x,node y)
{
    return x.h<y.h;
}
/*5 2
1 2 2 2 7*/

int main()
{
    scanf("%d%d",&n,&w);
    for(int i=1; i<=n; i++)
    {
        scanf("%d",&b[i].h);
        b[i].e=i;
    }
    sort(b+1,b+n+1,cmp);
    for(int i=n;i>=1;i--)   ///逆向遍历,更新最优解
    {
        tmp=-1;
        l=b[i].e-w;r=b[i].e+w;  ///i结点的左右能到达的边界
        for(int j=i+1;j<=n;j++)
        {
             ///注意严格递增,然后循环找出i之后的最大值来
            if(b[j].e>=l&&b[j].e<=r&&b[j].h>b[i].h&&b[j].len>tmp)  
            {
                tmp=b[j].len;
            }
        }
        if(tmp>=0)      ///如果找到解,就得对i结点的len加一
            b[i].len=tmp+1;
    }
    int maxx=b[1].len;      ///找到所有结点的最大值
    for(int i=2;i<=n;i++)
        maxx=max(maxx,b[i].len);
    printf("%d\n",maxx);

    return 0;
}

 

内容概要:本文深入解析了扣子COZE AI编程及其详细应用代码案例,旨在帮助读者理解新一代低门槛智能体开发范式。文章从五个维度展开:关键概念、核心技巧、典型应用场景、详细代码案例分析以及未来发展趋势。首先介绍了扣子COZE的核心概念,如Bot、Workflow、Plugin、Memory和Knowledge。接着分享了意图识别、函数调用链、动态Prompt、渐进式发布及监控可观测等核心技巧。然后列举了企业内部智能客服、电商导购助手、教育领域AI助教和金融行业合规质检等应用场景。最后,通过构建“会议纪要智能助手”的详细代码案例,展示了从需求描述、技术方案、Workflow节点拆解到调试与上线的全过程,并展望了多智能体协作、本地私有部署、Agent2Agent协议、边缘计算插件和实时RAG等未来发展方向。; 适合人群:对AI编程感兴趣的开发者,尤其是希望快速落地AI产品的技术人员。; 使用场景及目标:①学习如何使用扣子COZE构建生产级智能体;②掌握智能体实例、自动化流程、扩展能力和知识库的使用方法;③通过实际案例理解如何实现会议纪要智能助手的功能,包括触发器设置、下载节点、LLM节点Prompt设计、Code节点处理和邮件节点配置。; 阅读建议:本文不仅提供了理论知识,还包含了详细的代码案例,建议读者结合实际业务需求进行实践,逐步掌握扣子COZE的各项功能,并关注其未来的发展趋势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值