码迷,mamicode.com
首页 > 其他好文 > 详细

topcoder srm 420 div1

时间:2017-09-23 13:43:49      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:循环   lan   code   表示   tput   需要   div   max   输出   

problem1 link

暴力即可。因为即便所有数字的和是50,50所有的不同的划分数只有204226中。所以最长的循环也就这么大。

problem2 link

令$f[i][j]$表示有$i$个红色和$j$个黑色时最大的期望,那么:

(1)当$j=0$时,$f[i][0]=f[i-1][0]+1$;

(2)当$j>0$但是$i=0$时,$f[i][j]=0$;

(3)当$j>0$且$i>0$时,$f[i][j]=max(0,(f[i-1][j]+1)*\frac{i}{i+j}+(f[i][j-1]-1)*\frac{j}{i+j})$

problem3 link

设$B$为$outputValues$中的最大值。

当$inputValue \geq B*(B-1)$时,在将$inputValue$置换后的输出中一定有$B$。否则,将有大于等于$B$个小于等于$B-1$的数字。那么这大于等于$B$个数字中,一定有某些数字的和是$B$的倍数($x_{1},x_{1}+x_{2},,,,,x_{1}+x_{2}+..+x_{n}$中要么存在$B$倍数的数字,要么一定存在两个数字模$B$的值相等,它们的差就是$B$的倍数)。这时将其拿掉换成都是$B$得到的数字个数更小。

这样的话,对于只需要解决小于$B*(B-1)$的部分(大于等于$B*(B-1)$的部分都可以直接换成若干$B$)。这里可以使用动态规划。记录置换$i$需要的最少数量以及在这种置换中用到的最大的是$outputValues$中哪一种。

这里需要解决的是,当$i$是$outputValues$中的某个数字时,一定要将$i$替换成至少两个数字之和。可以令$bestPay[i]$表示将$i$置换$i$所需要的最小的个数()

topcoder srm 420 div1

标签:循环   lan   code   表示   tput   需要   div   max   输出   

原文地址:http://www.cnblogs.com/jianglangcaijin/p/7580817.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!