Topcoder SRM 666 DIV 1
WalkOverATree
题意:给你一棵树,有个人在节点0,现在问你,这个人走L步,最多能访问多少个不同的节点,一个节点可以被走多次,但只算一次。
题解:这个问题的关键在于,每个点最多走两次,这是因为我要么一次性走到这个点,要么从这个点回去走其他的点,不可能出现走三次的情况,这里需要细想清楚。
那么我们可以得到这样的一个算法:枚举一条一次性走的路径,想象成主干道,这个主干道上连接有若干旁道,那么我可以访问这个旁道上的某些点,然后返回主干道,这些点我一共要用两倍的步数才能走完,因为要返回主干道,并且容易发现,这对任意一个旁道都是一样的。
设d[i]表示i离根节点的距离,ans是最终的答案,那么ans=max(ans,d[i]+1+min(n-d[i]-1,(L-d[i])/2))。
SumOverPermutations
题意:
有个奇葩,组合数学很渣,老师问他:无限个n种颜色的球放在n个有顺序的盒子中,每个盒子放一个,相邻盒子的球的颜色不同,有多少种方法。这个奇葩给了个奇葩的解答,他说这和放的顺序有关,比如有三个盒子,三种颜色的球,若放的顺序是 1 2 3,那么答案就是3×2×2,若放的顺序是 1 3 2,那么答案就是3×3×1。更一般的,他认为,若一个位置的左侧和右侧都被放了,那么现在有(n-2)种可能性,若只有一侧被放了,那么有(n-1)种可能性,若两侧都没放,那么有n种可能性。我们知道这是明显错误的,但是,题目就是问你,给你个n,这n!种放的顺序按照这个奇葩的算法得到的答案是多少。
题解:
令$dp[i]$表示$n$种颜色放在$i$个盒子中,答案是多少。那么转移就只有两种情况:
一种是将第$i$个球放在边界上,这种的转移是$dp[i]=2*dp[i-1]*(n-1)$,第一项的2表示左右两个边界,第二项$dp[i-1]$表示$i-1$时的情况,第三项$n-1$表示由于第$i$个球在边界,所以只乘$n-1$
另外一种是将第$i$个球放在中间某个位置,假设其左侧有$j$个球,那么转移必然是
$$dp[i]=\sum\limits_{j=1}^{i-2}C_{i-1}^j*dp[j]*dp[i-j-1]*(n-2)$$
所以总的转移是
$$dp[i]=(\sum\limits_{j=1}^{i-2}C_{i-1}^j*dp[j]*dp[i-j-1]*(n-2))+2*dp[i-1]*(n-1)$$
答案显然是$dp[n]$
long long dp[MAX_N];
long long mod=;
long long C[MAX_N][MAX_N]; class SumOverPermutations
{
public:
int findSum(int n)
{
C[][]=;
for(int i=;i<=n;i++)
for(int j=;j<=i;j++)
C[i][j]=(j==?:C[i-][j-]+C[i-][j])%mod;
dp[]=n%mod;
dp[]=n%mod*(n-)%mod*%mod;
for(int i=;i<=n;i++){
dp[i]=%mod*(n-)%mod*dp[i-]%mod;
for(int j=;j<=i-;j++)
dp[i]=(dp[i]+C[i-][j]%mod*dp[j]%mod*dp[i-j-]%mod*(n-)%mod)%mod;
}
return dp[n]%mod;
}
};
Topcoder SRM 666 DIV 1的更多相关文章
- TopCoder SRM 560 Div 1 - Problem 1000 BoundedOptimization & Codeforces 839 E
传送门:https://284914869.github.io/AEoj/560.html 题目简述: 定义"项"为两个不同变量相乘. 求一个由多个不同"项"相 ...
- TopCoder SRM 667 Div.2题解
概览: T1 枚举 T2 状压DP T3 DP TopCoder SRM 667 Div.2 T1 解题思路 由于数据范围很小,所以直接枚举所有点,判断是否可行.时间复杂度O(δX × δY),空间复 ...
- Topcoder SRM 656 (Div.1) 250 RandomPancakeStack - 概率+记忆化搜索
最近连续三次TC爆零了,,,我的心好痛. 不知怎么想的,这题把题意理解成,第一次选择j,第二次选择i后,只能从1~i-1.i+1~j找,其实还可以从j+1~n中找,只要没有被选中过就行... [题意] ...
- [topcoder]SRM 646 DIV 2
第一题:K等于1或者2,非常简单.略.K更多的情况,http://www.cnblogs.com/lautsie/p/4242975.html,值得思考. 第二题:http://www.cnblogs ...
- [topcoder]SRM 633 DIV 2
第一题,http://community.topcoder.com/stat?c=problem_statement&pm=13462&rd=16076 模拟就可以了. #includ ...
- TopCoder SRM 596 DIV 1 250
body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...
- Topcoder SRM 648 (div.2)
第一次做TC全部通过,截图纪念一下. 终于蓝了一次,也是TC上第一次变成蓝名,下次就要做Div.1了,希望div1不要挂零..._(:зゝ∠)_ A. KitayutaMart2 万年不变的水题. # ...
- 【topcoder SRM 702 DIV 2 250】TestTaking
Problem Statement Recently, Alice had to take a test. The test consisted of a sequence of true/false ...
- TopCoder SRM 639 Div.2 500 AliceGameEasy
题意: 一个游戏有n轮,有A和B比赛,谁在第 i 轮得胜,就获得 i 分,给出x,y,问A得x分,B得y分有没有可能,如果有,输出A最少赢的盘数 解题思路: 首先判断n(n+1)/2 = (x+y)是 ...
随机推荐
- Python操作MySQL数据库(二)
pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 下载安装: pip install pymysql 1.执行SQL语句 #!/usr/bin/env pytho ...
- CSS中behavior属性语法简介
本文和大家重点讨论一下CSS中behavior属性语法的使用,在进行CSS网页布局的时候,我们经遇到刷新要保留表单里内容的时候,习惯的做法使用cookie,但是那样做实在是很麻烦,CSS中的behav ...
- Core Java的那点事儿之ArrayList
Core Java的那点事儿之ArrayList 万丈高楼平地起,Java基础要拿起.今天就从我看的Core Java里找了些小基础点来分享一下. 首先隆重介绍一下专业级龙套演员---Employee ...
- 踩坑 Uncaught RangeError: Maximum call stack size exceeded
今天遇到了一个错误, 堆栈溢出,很好奇就是一个简单ajax请求怎么会报这个错误,研究了一下,发现犯了一个很低级的错误,data的参数错误了: passWord是未定义的变量,值为空,然后导致了这个问题 ...
- xstream+dom4j比较对象
package com.brmoney.util.obj2xml; import java.util.Iterator; import java.util.List; import org.dom ...
- 【bzoj2132】圈地计划 网络流最小割
题目描述 最近房地产商GDOI(Group of Dumbbells Or Idiots)从NOI(Nuts Old Idiots)手中得到了一块开发土地.据了解,这块土地是一块矩形的区域,可以纵横划 ...
- 编码风格——linux内核开发的coding style
总结linux内核开发的coding style, 便于以后写代码时参考. 下面只是罗列一些规则, 具体说明可以参考: 内核源码(Documentation/CodingStyle) 01 - 缩进 ...
- Python之文件操作:文件、目录的操作
一.创建 1.创建文件 open(path,'w') 2.创建目录 (1)os.mkdir(pt[, mode=0777]) 新建一个目录pt,参数mode表示生成的目录的权限,默认是超级权限,也就是 ...
- group by timestamp
SELECT DATE_FORMAT( deteline, "%Y-%m-%d %H" ) , COUNT( * ) FROM test GROUP BY DATE_FORMAT ...
- IntelliJ IDEA如何导入Gradle项目
最近学习Gradle,本文来重点介绍一下,如何使用IntelliJ IDEA导入`Gradle项目的一种方法. 选择菜单栏的File->Open. 在打开的窗口选择对应Gradle项目的buil ...