2577 HUD (动态规划)

本文通过描述解决海盗使用打字软件时的优化问题,深入探讨了动态规划(DP)算法的应用。通过实例分析,展示了如何利用DP解决实际问题,并提供了一段C++代码实现。重点介绍了状态转移方程的构建,以及如何通过最小化打字次数来优化输入过程。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2577


看别人代码做了这个题,感觉dp好强大,很震撼,哎,我还是太年轻了,学的太少了


Problem Description
Pirates have finished developing the typing software. He called Cathy to test his typing software. She is good at thinking. After testing for several days, she finds that if she types a string by some ways, she will type the key at least. But she has a bad habit that if the caps lock is on, she must turn off it, after she finishes typing. Now she wants to know the smallest times of typing the key to finish typing a string.
 

Input
The first line is an integer t (t<=100), which is the number of test case in the input file. For each test case, there is only one string which consists of lowercase letter and upper case letter. The length of the string is at most 100.
 

Output
For each test case, you must output the smallest times of typing the key to finish typing this string.
 

Sample Input
3 Pirates HDUacm HDUACM
 

Sample Output
8 8 8
Hint
The string “Pirates”, can type this way, Shift, p, i, r, a, t, e, s, the answer is 8. The string “HDUacm”, can type this way, Caps lock, h, d, u, Caps lock, a, c, m, the answer is 8 The string "HDUACM", can type this way Caps lock h, d, u, a, c, m, Caps lock, the answer is 8
 

 定义两个数组,一个是始终开的状态,一个是始终关的状态,然后就相互转化去改状态最小值,千万要记得可以用 Shift   键啊!!!!

解释在代码中,




#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

#define N 105

int a[N];  //Num  Lock 键始终开
int b[N];  //Num  Lock 键始终关

inline int min(int a,int b)
{
    return a<b?a:b;
}

int main()
{
    char c[N];

    int t,i;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%s",c+1);  //方便而已,自己猜测吧

        int len=strlen(c+1);  //如果是strlen(c),len=0;
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        a[0]=1;  //打开Num  Lock 键

        for(i=1;i<=len;i++)
            if(c[i]>='a'&&c[i]<='z')
            {
                a[i]=min(a[i-1]+2,b[i-1]+2);  
                      //Shift+字母    字母+Num  Lock 键
                b[i]=min(a[i-1]+2,b[i-1]+1);
                     //Num Lock键+字母   字母     
            }
            else
            {
                a[i]=min(a[i-1]+1,b[i-1]+2);  //同理
                b[i]=min(a[i-1]+2,b[i-1]+2);
            }

            a[len]++; //关掉Num Lock键

            int ans=min(a[len],b[len]);
            printf("%d\n",ans);
    }
    return 0;
}



内容概要:本文围绕“栅格内牛耕”策略与A星(A*)算法相结合的全覆盖路径规划方法展开研究,提出了一种适用于栅格化环境的高效路径规划方案。通过引入系统性的“牛耕式”扫描策略,确保对区域内所有有效栅格的无遗漏覆盖,并融合A*算法进行路径优化,提升路径的合理性与执行效率。该方法特别适用于需完成全域遍历任务的智能设备,如清洁机器人、农业自动化机械和巡检无人机等。文中详细阐述了算法的设计思路、关键实现步骤及启发式函数的改进机制,并借助Matlab平台进行了仿真实验,验证了该方法在复杂障碍环境下的有效性与鲁棒性。; 适合人群:具备一定Matlab编程基础,从事路径规划、智能机器人、自动化控制等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于扫地机器人、无人农场农机、巡检机器人等需实现区域全覆盖作业的设备路径规划;②帮助研究人员深入理解A*算法在全覆盖场景中的改进策略,掌握覆盖优先级、方向约束与回溯机制的设计方法;③作为教学与科研案例,辅助学习启发式搜索算法与系统性覆盖策略的融合应用。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点分析A*算法在覆盖完整性与路径最优化之间的平衡机制,通过调整环境地图、障碍物分布及起始点位置开展多组仿真实验,深入探究算法性能影响因素与优化方向。
内容概要:本文深入研究了LLC谐振变换器的变频移相混合控制模型,并基于Simulink平台完成了系统的建模仿真与性能验证。该控制策略融合变频控制与移相控制的优点,旨在提升LLC变换器在宽输入电压和宽负载工况下的转换效率与运行稳定性。文章系统阐述了LLC谐振变换器的工作原理、小信号建模方法、混合控制策略的设计思路及其实现方式,重点分析了其在实现零电压开关(ZVS)、抑制环流、降低开关损耗和提高整体效率方面的优势。通过详尽的仿真结果,验证了所提出混合控制模型在动态响应、稳态精度和系统鲁棒性方面的优越性能。; 适合人群:具备电力电子变换器基础知识、掌握Simulink/Matlab仿真技能,从事高频高效电源系统、新能源变换技术或相关领域研究的研究生、高校教师及工程技术人员。; 使用场景及目标:① 深入理解LLC谐振变换器的核心工作机理与数学模型;② 掌握并实现变频与移相结合的先进控制策略;③ 利用Simulink搭建完整的控制系统模型,进行仿真分析与参数优化,为实际硬件开发提供理论支撑和技术储备。; 阅读建议:建议读者结合提供的Simulink模型进行同步操作与参数调试,重点关注控制逻辑的实现细节与关键波形的分析,有条件者可进一步开展硬件实验,实现从仿真到实物的闭环验证,深化理论与工程实践的融合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值