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])
下面来分析一下每道题目:
[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
- 2016.8.16.总结
- 2016.8.5 学习总结
- 2016.8.6 学习总结
- 2016.8.6 学习总结
- 2016.8.6 学习总结
- 2016.8.10测试总结
- 2016.8.12总结
- 2016.8.14总结
- 2016.8.15.总结
- 2016.8.17.总结
- 2016.8~9总结
- 2016.8~9总结
- 2016.8~9月总结
- 2016.8.25 暑假总结
- 16.git使用总结
- 总结
- 总结
- 总结
- 自定义Dialog
- 手机网络状态改变android
- Bulletproof SSL and TLS(读书笔记)
- 深入理解PHP代码的执行的过程
- HDU 2818 && POJ1988 带权并查集
- 2016.8.16.总结
- javaSrcipt中的冒泡排序
- 嵌入式开发29天(多线程的同步互斥机制)
- 接入安卓微信支付笔记
- 根据身份证获取出生年月
- Spring MVC @Validated的使用
- UVA 10054 The Necklace#
- hdu 4445 物理问题,枚举角度
- mpi学习日志(14):mpi4py与probe