回忆京都

本文深入探讨了二维前缀和算法的实现细节,包括如何使用动态规划计算组合数,并在此基础上进行取模运算,避免整数溢出。通过一个具体的代码示例,展示了如何在二维数组中高效地进行区间求和,特别强调了在取模运算中需要注意的细节。

 二维前缀和有减法,取模时要x=(x%mod+mod)%mod;

#include <iostream>
#include <cstdio>
using namespace std;
inline int read()
{
	int x=0,f=1;
	char c=getchar();
	while(c<'0'&&c>'9')
	{
		if(c=='-')  f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		x=x*10+c-'0';
		c=getchar();
	}
	return f*x;
}
const int N=1e3+5,mod=19260817;
int c[N][N],s[N][N],q,n,m;
int main()
{
	c[0][0]=1;
	for(int i=1;i<=1000;i++)
	{
		c[i][0]=1;
		for(int j=1;j<=i;j++)
		  c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
	}
	for(int i=1;i<=1000;i++)
	  for(int j=1;j<=1000;j++)
	  	s[i][j]=((s[i-1][j]+s[i][j-1]-s[i-1][j-1]+c[i][j])%mod+mod)%mod;
	q=read();
	while(q--)
	{
		n=read();  m=read();
	    cout<<s[m][n]<<"\n";
	}
}

 

### STM32 DAC采集教程 #### 初始化配置 为了实现STM32的DAC功能,首先要确保正确初始化DAC模块。这涉及到设置DAC通道、使能DAC外设以及配置DAC的工作模式。 ```c // 配置DAC结构体参数并初始化DAC DAC_InitTypeDef DAC_InitStructure; DAC_StructInit(&DAC_InitStructure); DAC_InitStructure.DAC_Trigger = DAC_Trigger_None; // 不使用触发器 DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; // 关闭波形生成 DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0; // 设置噪声幅度掩码位数为最低有效位 DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; // 启用输出缓冲区 DAC_Init(DAC_Channel_1, &DAC📐⚗📐📐📐📐📐📐📐📐⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗📐 void DAC_Configuration(void) { /* DAC channel1 selected */ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); // 使能DAC时钟 /* Configure PA4 in analog mode to be used as DAC output */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Enable DAC Channel1 */ DAC_Cmd(DAC_Channel_1, ENABLE); } ``` 上述代码展示了如何通过软件方式来启用和配置DAC通道1[^1]。这里需要注意的是,在实际应用中还需要考虑硬件连接部分,比如PA4引脚应该被配置成模拟输入状态以便作为DAC输出端口。 #### 数据转换与读取 当完成基本的初始化之后就可以向指定寄存器写入数值从而控制DAC输出相应的电压电平: ```c uint16_t value_to_output; /* Set the DAC Channel1 data register with the converted data */ value_to_output = (uint16_t)((input_voltage * 4095) / VREF); // 将期望输出的电压值映射到12bit范围内(假设Vref=3.3v) /* Write this value into the specified data holding register of DAC channel1 */ DAC_SetChannel1Data(DAC_Align_12b_R, value_to_output); ``` 这段程序片段说明了怎样计算要发送给DAC的数据,并将其加载至对应的寄存器内以改变其输出电压水平[^2]。 对于更高效的处理大量数据的情况,则可以采用DMA方式进行传输,这样可以在后台自动完成多次传送而无需CPU干预,提高效率的同时也减轻了处理器负担。 #### 实际案例中的PWM-DAC组合运用 有时会遇到需要利用PWM信号配合DAC来进行更加复杂的信号合成场景,此时可以通过编写专门针对此类需求设计的功能库文件如`pwmdac.h`所示[^3]: ```c #ifndef __PWMDAC_H #define __PWMDAC_H #include "stm32f1xx_hal.h" /** * @brief Initializes PWM and DAC settings. */ void pwmdac_init(uint16_t arr, uint16_t psc); /** * @brief Sets voltage level using PWM generated by TIMx. * * @param vol Voltage level between 0~4095 corresponding to full scale range. */ void pwmdac_set_voltage(uint16_t vol); #endif /* __PWMDAC_H */ ``` 此头文件定义了一些用于初始化PWM定时器及其关联DAC的操作接口函数原型声明,方便开发者调用这些API快速搭建起基于PWM调节DAC输出的应用框架。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值