poj 2362Square(DFS)

本文探讨了一道经典的编程问题——如何将一组木棒按长度分为四组,使得每组的总长度相等。文中详细介绍了多种剪枝策略来优化递归搜索过程,包括对木棒长度进行限制和排序等技巧。

           开始超时,上网搜了下,发现要剪枝才行……附上搜到的剪枝方法:    

剪枝1:
所有木棍的长度必须能被4整除

剪枝2:
最长的木棍不能长于正方形的边长

这两个是最容易想到的,用上这两个可以79ms通过

剪枝3:
同样长度的木棍的同样数量的组合只搜索一次。
这个剪枝需要将木棍从大到小排列,在搜索的时候加一句代码就行了,代码很巧妙。
由于数据问题,这个剪枝貌似不管用。

剪枝4:
每条边的木棍按照从大到小的顺序拼接
如果某条木棍不能够作为某边的第一条木棍,那比它短的也不行
想一想还是可以理解,后面的边始终会用到这条长的棍子,那时候可供选择的木棍更少
所以在前面的边拼不成,在后面的边更加拼不成
这个剪枝非常牛逼,不知道谁想出来的,代码只需要一句。太牛逼了。
由于数据的N比较小,这个剪枝相当管用。

无法实现的理想化剪枝:
如果在枚举中,发现用一条长的棍子枚举失败,那么几条短的棍子组成同样长度的棍子也必然不用试验。
这个很理想,但是实现的代价很大。

题目描述:

1011的弱版……给一堆木棒,每根木棒有个长度,求是否能使这些木棒分成4堆,每堆总长度相等

解题报告:

显然可以求得每堆的总长度len=all/4;

然后开始填充len……方法和1011一样……用了几个减枝

1。如果4不能整除all,不用搜索,不可能

2。如果最大木棒的长度大于len,不用搜索,不可能

3。对所有木帮排序,填充时先用长度长的,因为长度长的木帮显然不如短的用得灵活

4。如果已经找到答案,尽快返回上一层

5。判断当前长度是否大于每段的长度,小于就不用搜索了,显然不可能

6。相同长度的木棒不用搜索多次

7。从最接近并小于这根木棒的木棒开始搜索,这根之前的木棒显然都用过了

8。判断当前剩下的段数是否小于4-d,不用搜索,不可能

代码:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int len[21];
int visited[21];
int N, M;
//start:开始的木棍标号 l:已组合的长度, num:已组合成功的目标正方形的边数, length:目标正方形的边长
int DFS(int start, int l, int num, int length)
{
    if(num==4) return 1;
    int i;
    for(i=start; i<M; i++)
    {
        if( visited[i]==0 )
        {
            if( l+len[i]==length )
            {
                visited[i]=1;
                if( DFS(0, 0, num+1, length )) return 1;
                visited[i]=0;
            }
            else if( l+len[i]<length)
            {
                visited[i]=1;
                if( DFS(i+1, l+len[i], num, length )) return 1;
                visited[i]=0;
            }
              while( len[i]==len[i+1])//某长度的木棍不能完成某个子问题,那么和它一样长的也不能完成
                  i++;
        }
    }
    return 0;
}
bool cmp(int a, int b)
{
	return a>b;
}
int main()
{
    int i, sum, length;
    cin>>N;
    while( N-- )
    {
        sum=0;//sum记录所有木棍的长度和
        cin>>M;
        memset(visited, 0, sizeof(visited));
        for(i=0; i<M; i++)
        {
             cin>>len[i];
             sum+=len[i];
        }
        sort(len, len+M, cmp);
        length=sum/4;
        if( sum%4==0 && len[0]<=length)//木棍总和能被4整除且最长的木棍小于正方形边长
        {
            if( DFS(0, 0,0,length))
               cout<<"yes"<<endl;
            else
               cout<<"no"<<endl;
        }
         else //如果不可以,肯定不能组成正方形
            cout<<"no"<<endl;
    }
}



内容概要:本文围绕“基于改进型SVPWM调制的钳位型单相三电平NPC逆变器中点电位平衡”展开仿真研究,系统探讨了如何通过改进的空间矢量脉宽调制(SVPWM)策略有效抑制单相三电平中性点钳位(NPC)逆变器中存在的中点电位漂移问题。研究依托Simulink仿真平台构建系统模型,详细分析了不同调制策略对中点电压波动的影响机制,验证了所提出控制方法在提升输出波形质量、增强系统稳定性方面的有效性。同时,文档附带了多项相关科研主题资源,涵盖多电平逆变器控制、虚拟同步发电机(VSG)、微电网能量管理、信号处理、路径规划、机器学习与深度学习等多个前沿方向,展现了较强的综合性与科研实用价值。; 适合人群:电气工程、自动化、新能源科学与工程、电力电子与电力传动等领域的硕士、博士研究生,以及从事电力系统控制、可再生能源并网技术研究的科研人员与工程技术人员。; 使用场景及目标:① 深入理解三电平NPC逆变器的工作原理及中点电位不平衡的成因与危害;② 掌握改进型SVPWM调制策略的设计思想及其在中点电位控制中的实现路径;③ 利用Simulink搭建电力电子系统仿真模型,开展控制算法的验证与优化;④ 拓展至三相多电平逆变器、VSG构网型控制、微电网协同优化等高级课题的研究与复现。; 阅读建议:建议读者结合Simulink仿真环境进行实操演练,重点关注调制策略中开关状态选择与作用时间分配对中点电荷累积的影响机制。初学者应先夯实传统SVPWM理论基础,再逐步过渡到改进策略的学习;进阶研究者可尝试将该方法推广至多目标协同控制或引入智能优化算法进一步提升动态响应性能。
内容概要:本文档聚焦于三电平ANPC并网逆变器的先进控制策略研究,重点阐述了一种融合DPWMA(离散脉宽调制)调制、正负序电流分离控制与电网电压前馈补偿的复合控制方法,并基于Simulink平台完成了系统建模与仿真验证。该方法旨在提升逆变器在电网电压不平衡等复杂工况下的动态响应性能与运行稳定性,特别针对低电压穿越(LVRT)能力进行了优化设计。研究内容还涵盖了中点电位平衡控制、虚拟同步发电机(VSG)技术以及构网型逆变器的双闭环控制架构,体现了对高阶电力电子变换系统深层次的建模与控制探索。文档同时罗列了大量相关的MATLAB/Simulink仿真实例,覆盖电力电子、新能源并网、优化算法、机器学习、路径规划等多个前沿科研领域,强调了科研工作中“借力”现有成果与追求“创新”突破的双重重要性。; 适合人群:从事电力电子与电力传动、新能源发电系统、微电网与智能电网控制等相关领域的研究生、科研人员及工程技术人员,要求具备扎实的电力系统基础知识、现代控制理论背景以及熟练的MATLAB/Simulink仿真操作能力。; 使用场景及目标:①深入研究三电平ANPC逆变器在不平衡电网条件下的高性能控制策略;②实现DPWMA调制技术与正负序电流独立控制的协同仿真与性能评估;③设计并验证融合电网前馈补偿与中点电位平衡的复合控制算法;④作为高级电力电子系统仿真与构网型控制技术的学习范本与项目开发参考。; 阅读建议:建议读者结合文档指引,通过指定公众号或网盘获取完整的仿真模型资源,在Simulink环境中动手复现核心控制模块,重点关注正负序分离算法、DPWMA调制波生成逻辑与前馈控制环节的实现细节,同时参考文末列出的多样化研究方向,以拓宽技术视野并激发创新思维。
内容概要:本文围绕三相并网逆变器的控制策略展开深入研究,提出了一种基于虚拟阻抗与统一有源阻尼相结合的复合控制方法,并融合SVPWM(空间矢量脉宽调制)与SPWM(正弦脉宽调制)两种调制技术,在Simulink平台中构建完整的系统仿真模型。该策略旨在解决弱电网条件下由LC滤波器引发的谐振不稳定问题,通过引入虚拟阻抗重塑输出阻抗特性,结合统一有源阻尼技术实现对多模态谐振的有效抑制,从而提升系统的稳定性与鲁棒性。研究详细阐述了虚拟阻抗的设计原理、有源阻尼的实现机制及其与电流环、电压环等传统控制结构的集成方式,同时对比分析了SVPWM与SPWM在动态响应速度、稳态精度及谐波抑制能力等方面的性能差异,验证了所提控制策略在改善电能质量与增强系统动态性能方面的优越性。; 适合人群:具备电力电子、新能源发电或自动控制等相关专业背景,从事并网逆变器建模、控制算法开发与稳定性分析的研究生、科研人员及电力系统领域工程技术人员。; 使用场景及目标:①用于解决三相并网逆变器在弱电网环境下面临的LC滤波器谐振失稳问题;②为提升并网系统的电能质量与运行可靠性提供高效的阻尼补偿方案;③适用于高校科研仿真验证、企业技术研发优化以及高级课程教学案例设计与实践。; 阅读建议:建议结合提供的Simulink仿真模型进行实操演练,重点关注虚拟阻抗参数整定与统一有源阻尼环节的协调设计,深入探究不同调制策略下系统频域特性与时域响应的变化规律,通过对比实验全面评估控制策略的有效性、适应性与工程应用潜力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值