枚举与模拟

今日学习——枚举与模拟~~

1.【noip2008提高】火柴棒
{
给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示:

在这里插入图片描述
注意:
加号与等号各自需要两根火柴棍
如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C>=0)
n根火柴棍必须全部用上

一直枚举不就行了吗
可是次数太多一定会超时!!
怎么办?
老刘大法
{
代码思路

这里是引用
火柴棒
11 + 1 = 12//实例
4 2 2 2 7 17//示例
int n;
int stick[1500]={6,2,5,5,4,5,6,3,7,6};
cin>>n; n-=4;
//预处理
for (int i=10;i<=2222;i++)
stick[i]=stick[i/10]+stick[i%10];
// 求111 ,stick[11]+ stick[1];
//枚举
for(int A=0;A<=1111;A++)
for (int B=0;B<=1111;B++)
{
int cnum=n-stick[A]-stick[B];
if (cnum<=0) continue;
if (cnum==stick[A+B]) ans++;
}
cout<<ans<<endl;

1.我们可以先设出1-9的火柴数,11的火柴数就等于1的火柴数加1的火柴数(把各数的火柴数存到下标为各数的数组);
2.先进行预处理,这样可以大大减少运算;
3.做题时一定要想到界限;
}
2.最大连续和
给定N个数,求这N(1 <=N <= 100,000) 个数的某个连续子序列的累加和,保证这个连续子序列的累加和最大。
原思路:
{
枚举起点
枚举终点
反复比较
得出答案
}
这样一定会超时!
部分思路
{
先进行一个预处理
求出1-1,1-2,1-3…1-n的和
因为2-3==1-3-1-1;
}
老刘大法
{
这只是一个粗糙的代码

int sum=0;
ans=-100000000;

for (int i=1;i<=n;i++)
{
   sum+=a[i];
   if (sum>ans)  ans=sum;
   if (sum<0)  sum=0;
}用

1.如果当前累加和为负数,会让后边累加和变小反之,会让后边累加和变大
2.ans存的是最大的子串 ,sum起到了一个判断的作用当前所有的和是否小于零??小于零就把sum设为零(就是把前面全部去掉)
3.考试时可以先在本上模拟一下这个过程,联想到学过的知识,如果真的想不到一定要学会第二种;
}
3.破碎的项链
你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的。 这里是 n=29 的二个例子:

在这里插入图片描述

第一和第二个珠子在图片中已经被作记号。 图片 A 中的项链可以用下面的字符串表示: brbrrrbbbrrrrrbrrbbrbbbbrrrrb . 假如你要在一些点打破项链,展开成一条直线,然后从一端开始收集同颜色的珠子直到你遇到一个不同的颜色珠子,在另一端做同样的事。(颜色可能与在这之前收集的不同) 确定应该在哪里打破项链来收集到最大多数的数目的子。 Example 举例来说,在图片 A 中的项链,可以收集到8个珠子,在珠子 9 和珠子 10 或珠子 24 和珠子 25 之间打断项链。 在一些项链中,包括白色的珠子如图片 B 所示。 当收集珠子的时候,一个被遇到的白色珠子可以被当做红色也可以被当做蓝色。 表现项链的字符串将会包括三符号 r , b 和 w 。 写一个程序来确定从一条被供应的项链最大可以被收集珠子数目。

—————————————————————————————
直接说思路;
可以先把这个串,变成两倍,这样就可以好运算了!!
}
总结
{
1.自己模拟,发现规律
2.可以进行一个预处理,减轻运算时间(部分时候)
3.多做题,积累经验
4.多看大佬思路或代码,偷取他人智慧
5.自己一定要多看,多练,多学,多预习!
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值