CF713C Sonya and Problem Wihtout a Legend

博客讨论了如何将一个正整数序列通过+1和-1操作变为严格上升序列,提出通过转化为非降序列问题简化思路。文章介绍了从O(n^3)到O(n^2)的动态规划解决方案。
摘要由CSDN通过智能技术生成
题意:
给出n个正整数组成的序列,可以对于任意位置的数进行+1,-1操作,可以使得数变成0或负数。问最少进行几次操作能够使得这个序列变成严格上升序列。
惊喜地发现一道几乎一模一样的题:CF13C Sequence
一道要求的是严格上升序列,一道要求的是非降序列。对于严格上升序列我们很难进行操作,所以可以通过改变数值,把它转变为非降序列的要求来做。
下面给出一个套路:
原题要求:a[i]<a[j],i<j
可得:a[i]-i<=a[j]-j
所以我们把所有的a[i]变为a[i]-i
现在的要求就是非降序列了。
下面给出为什么严格上升序列难以操作的解释:
如果是非降序列,我们可以发现,最后的最优序列一定有一种情况是:序列中的数字都是原来出现过的(随便yy即可证明)。 这样,我们就可以定义 f[i][j]: 前i位非降,且第i位的数字为j(所有出现过的数字中第j大的)。
那么,如果是严格上升序列的话,最后序列中的数字,是什么,我们都不知道,那么又怎么设立方程呢?
最直接的可以写出一个O(n^3) dp。
for (register int i=1; i<=n; ++i) f[1][i]=abs(a[1]-b[i]);
for (register int i=2; i<=n; ++i)
{
   
	for (register int j=1; j<=tot; ++j)
	{
   
		for 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于STM32F103ZET6芯片的库函数实现LED跑马灯的示例代码: ```c #include "stm32f10x.h" void Delay(__IO uint32_t nCount); int main(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); while(1) { GPIO_SetBits(GPIOB, GPIO_Pin_12); Delay(0x3FFFFF); GPIO_ResetBits(GPIOB, GPIO_Pin_12); GPIO_SetBits(GPIOB, GPIO_Pin_13); Delay(0x3FFFFF); GPIO_ResetBits(GPIOB, GPIO_Pin_13); GPIO_SetBits(GPIOB, GPIO_Pin_14); Delay(0x3FFFFF); GPIO_ResetBits(GPIOB, GPIO_Pin_14); GPIO_SetBits(GPIOB, GPIO_Pin_15); Delay(0x3FFFFF); GPIO_ResetBits(GPIOB, GPIO_Pin_15); } } void Delay(__IO uint32_t nCount) { for(; nCount != 0; nCount--); } ``` 该示例代码中,我们使用了STM32F103ZET6芯片的四个GPIO口(PB12、PB13、PB14和PB15)来控制四个LED灯的亮灭,通过轮流点亮不同的LED灯来实现LED灯的跑马灯效果。在主函数中,我们首先对四个GPIO口进行了初始化,然后通过使用库函数GPIO_SetBits和GPIO_ResetBits来控制GPIO口的亮灭,最后通过Delay函数来产生一定的延时。 需要注意的是,该示例代码中的延时函数Delay并不是一个很准确的延时函数,因为它只是通过循环来实现延时,而循环的执行时间会受到很多因素的影响,如CPU的主频、编译器的优化等。因此,在实际的应用中,我们需要使用更加准确的延时函数,如定时器中断等方式来实现延时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值