[SCOI2005]扫雷Mine

本文探讨了扫雷游戏的排列组合问题,通过给定的第二列信息,计算第一列雷的摆放方案数。利用动态规划的方法解决,详细解释了算法逻辑并提供了解决方案的代码实现。

1088: [SCOI2005]扫雷Mine

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 2028  Solved: 1187
[Submit][Status][Discuss]

Description

相信大家都玩过扫雷的游戏。那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来。万圣节到了,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字表示和它8连通的格子里面雷的数目。现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图: 由于第一列的雷可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息确定第一列雷有多少种摆放方案。

Input

第一行为N,第二行有N个数,依次为第二列的格子中的数。(1<= N <= 10000)

Output

一个数,即第一列中雷的摆放方案数。

Sample Input 1

2
1 1

Sample Output 1

2

Sample Input 2(这个是我自己加的,可能有人会错)

3
5 8 5

Sample Output 2

4

HINT

 

Source

                        [Submit][Status][Discuss]
 

分析

  由于这是一个N*2的棋盘,所以如果第二行都没有地雷,则第一行只要确定前两个格子的数,后面的自然可以递推出来。可以这么理解:假设我们要确定第一行第 i (i>=3) 个格子的地雷数,则要满足:first[i-2]+first[i-1]+first[i]==second[i-1]。当i==2时,first[i]=second[i-1]-first[i-1](first[2]=second[1]-first[1]),所以只要从0开始枚举first[1]的可能值就可以了。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=20000;
 4 int N,ans=0;
 5 int sec[maxn];
 6 int fir[maxn];
 7 bool jud();
 8 int main(){
 9     scanf("%d",&N);
10     for(int i=1;i<=N;i++)
11         scanf("%d",&sec[i]);
12     for(int i=0;i<=sec[1];i++){
13         memset(fir,0,sizeof(fir));
14         fir[1]=i;
15         fir[2]=sec[1]-i;
16         if(jud()==true){
17             ans++;
18         }
19     }
20     cout<<ans;
21     return 0;
22 }
23 bool jud(){
24     for(int i=3;i<=N+1;i++){
25         fir[i]=sec[i-1]-fir[i-2]-fir[i-1];
26     }
27     if(fir[N+1]) return false;
28     return true;
29 }

  特别小心:

  第27行的fir[N+1]可绝对不能改成fir[N+1]>0,因为可能存在负值,比如我上面给出的样例2。5 8 5是第二行,而且第一行可以推出1 4 3 -2的情况。我就因为这个WA了好多次。但是吧,写 fir[N+1]!=0 是 beyond all doubt √ 的,全怪我手贱。。。

 

转载于:https://www.cnblogs.com/CXCXCXC/p/4681569.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值