2016.8.16.总结

来源:互联网 发布:js复选框全选取消全选 编辑:程序博客网 时间:2024/06/03 16:52
这次比赛280分,我不是很满意,全班第8名。下次继续努力!
下面来分析一下每道题目:
[1]作弊
这其实是一题水题。首先,设s为一个回文串,枚举每一个点,把枚举到的每一个点都当作是这一个回文串的中心点(当然是在length(s)为奇数的时候),然后从这个中心点开始用指针枚举两边的每个字母,如果相等就把它记录起来,然后最后比较这个length(ans)的值是否大于原答案,如果大于,就更新。但这是远远不够的,因为我们只考虑了length(s)为奇数的情况,却没有考虑length(s)为偶数的情况,所以我们需要考虑偶数的情况,因为偶数是没有中心点的,所以我们不是像刚刚一样去两边找而是包括它本身去两边找,也就是把自己跟自己右边的东西比较,最后找到最大的回文串就AC了!
[2]最大杂置(set)
这题看起来比较难,暴搜是绝对拿不到好成绩的,所以我们需要找规律,我们可以发现,当n=1 时 只有一种,当n=2时 有两种,当n=3 时有三种,当n=4 时 有六种.....所以我们可以想到这是个杨辉三角形,排列是这样的:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1......
所以可以看到,n的答案就是杨辉三角形的第n+1行的最中间那个,也就是n div 2+1(因为包括每行为的偶数情况)。只需要找到这些数再直接输出就可以AC了!
[3]投影
其实跟上次那题WING很像,本该是第一题难度,但是作者把它题目一改,变成第三题了。我在比赛是用的是暴搜,二维数组无法开到1000000×10000000 所以只得了40分,时间超限一个点,就是首先找出所有建筑的阴影,在一个一个找出来,标记上数字就行了。这是暴搜的方法,正解是从头到尾找一遍后面表示高度的那个数,只要不是0就继续找,出现过的就标记一遍,最后输出答案就行了!
[4]除草(ontherun)
这是一题动态规划的题目,我在比事用的是贪心,人家都60,就我40,不知道为什么。正确的方法是动态规划,设f[i,j]表示当前从i开始到j的所有草都被除光了。而f[i,j,1]表示你当前在i上,f[i,j,2]表示你当前在j上。
所以状态转移方程为:
               (1)除第I-1棵草: F[I-1,J,1]+(N+I-J)*(A[I]-A[I-1])
F[I,J,1]:=MIN
              (2)除第J棵草: F[I-1,J,2]+(N+I-J)*(A[J]-A[I])


              (1)除第I棵草: F[I,J+1,1]+(N+I-J)*(A[J]-A[I])
F[I,J,2]:=MIN
              (2)除第J+1棵草: F[I,J+1,2]+(N+I-J)*(A[J+1]-A[J])
0 0
原创粉丝点击