【NOIP2012模拟10.17】jzoj总结

38 篇文章 0 订阅
6 篇文章 0 订阅

TOP

今天比赛特别困,要吐槽一下纪中的空调,真的太TM 冷了!(弄得一晚上睡不好){{{(>_<)}}}

T1(铁轨)

赛时:

	一看到题目就知道是个栈,淼的一逼,很快就切了。结果吧while打成了if,狠心爆零_(:зゝ∠)_

正解:

	同本人想的一模一样,直接模拟栈就好了。能够按照序列输出就“Yes”否则就输出“No”

T2(独立集)

赛时:

	第一眼一脸懵逼,再看一眼二连懵逼,于是看了about 15 mins才理解了题意。
	觉得是和树有关的算法(应该是DP),可惜本人过于蒟蒻,没打出来(。・・)ノ

正解:

	树形DP,对于每个节点,设f[i,0]表示节点以i为根(不选节点i)的子树的最大独立集个数。
						  f[i,1]表示节点以i为根(选上节点i)的子树的最大独立集个数。
	因为f[i,0]是不选,所以它儿子j可选可不选,就能得到 f[i,0]:=f[i,0*](f[j,0]+f[j,1]);
	同样f[i,1]是选择,所以它儿子j必须不能选,也能得到 f[i,1]:=f[i,1]*f[j,0];
	最后输出 f[1,1]+f[1,0] 就行了。

T3(石子游戏)

赛时:

	看起来很简单,实际上 真的(nan)很(de)简(yi)单(pi)!应该是找规律什么的,
	但是找了将近 1h 也没找出来,想着骗点分,结果一份也没有骗到 (;′⌒`)

正解:

	貌似是博弈论,呵呵,我这方面贼差的(方法策略类)。题解实现简单,理解很难,问了好几个人才懂。
	K=1的情况:必败结果都是2^i
	K=2的情况:必败结果为斐波那契数列。
	(P.S.:斐波那契数列性质:把任意一个数N分解成数列中的数相加,分解出的数至少相差2倍以上(注意是以上))
	K>2的情况:
	根据上面的两种情况,我们可以发现:当K不同时,只是分解出的数列不同,计算是一样的。
	那么我们只要算出一个序列,用这个序列的数相加来表示N,并且每两个数都要相差K倍以上。
	但是考虑到时间可能会爆,所以设当前K计算出的序列为A,则用B[i]表示从1~i序列中能构成的最大数。
	显然A[i]=B[i-1]+1(A[1]=1 且 B[1]=1)
	之后计算B[i],找到一个最大的j,且A[j]*k<A[i]
	因为当前的B[i]等于最大且和当前项的倍数不超过K的数所能构成的最大数,
	再加上当前数,所以B[i]=B[j]+A[i]。
	之后把N一直往下减,减到N=当前项,答案就是当前位置对应的数。

ALL IN ALL

这套考试还是很糟糕,希望下次继续努力!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值