杨辉三角形
2016-04-09 09:20
363 查看
F. 杨辉三角形
Time Limit: 1500msMemory Limit: 65536KB
64-bit integer IO format: %lld Java class name:Main
SubmitStatusPID:
4225
LZM同学比较牛,Lsy最近也越来越生猛,他们思路快,代码速度神勇。近期惊闻此二人均要参加校赛,队里决定出些题目卡他们,因为他们的罢工给题目组留下了繁重的负担……(报复报复)
于是,XsugarX瞄准了LZM不太喜欢看的数学题目以及Lsy猜公式的喜好,奸笑中(^.^)。这个数学问题是个比较古老的问题,有如下图的三角形被称为杨辉三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
[align=center]1 5 10 10 5 1[/align]
我们记第一个1为第0行,往下依次编号。
其中三角形左右两斜边上的数字均为1,其他位置均为其两肩上的数之和。
此两牛看到偶数就会觉得复杂,被卡的时间与偶数的个数成正比,XsugarX希望能卡他们的时间越久越好。
给定任意杨辉三角的行数n,请输出杨辉三角中前n行中总共有多少偶数。
Input
一个数n(0<=n<=3,000,000)。表示求杨辉三角前n行中偶数的个数。Output
一个数R。表示在杨辉三角前n行中共有R个偶数,由于结果可能会很大,请输出R mod 10,000,000的结果。Sample Input
4
Sample Output
4
这个题说是找偶数的规律,但结题报告里说奇数的规律更好看出来些 :杨辉三角的第n行中奇数个数等于2的k次方,k为n表示为二进制时一的个数。 然而我感觉这样更好理解 其中蓝色为奇数红色为偶数 三个蓝色三角形为相同的,中间的三角形为偶数,dp[1]表示第一行偶数的个数,规律为dp[i]=dp[i-x]*2+i-(i-x)*2;x表示当前i可满足的最大的2的几次方的值,i=5时,x=4;
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; const int MOD=10000000; int dp[3000010]; int sum[3000010]; void pp() { dp[0]=0; dp[1]=0; dp[2]=0; dp[3]=1; dp[4]=0; int x=4; int i; for( i=5;i<=3000001;i++) { dp[i]=dp[i-x]*2+i-(i-x)*2;//每一行的规律/ dp[i]=dp[i]%MOD; if(i==x*2) x=x*2; } sum[0]=0; for(i=0;i<=3000000;i++)//加和 sum[i]=(dp[i+1]+sum[i-1])%MOD; } int main() {pp(); int n; while(~scanf("%d",&n)) { printf("%d\n",sum ); } }
</pre><pre class="cpp" name="code">/*1 --0 1 1 1 --1 2 1 2 1 --2 2 1 3 3 1 --3 4 1 4 6 4 1 --4 2 1 5 10 10 5 1 --5 6 1 6 15 20 15 6 1 --6 9 1 7 21 35 35 21 7 1 --7 9 */
相关文章推荐
- hdoj 1203 I NEED A OFFER!【0-1背包+逆向思维】
- float类型进行计算精度丢失的问题
- LINUX内核分析第七周——可执行程序的装载
- ssl2334 铲雪车
- 约瑟夫环问题
- Java中resourceBundle和Properties的区别
- bootstrap 下拉菜单精简版
- 创业公司和大公司的差异
- document.frame
- nyoj 890 又见01背包【0-1背包+逆向思维】
- java调用存储过程和函数
- 【MongoDB】TTL时效集合
- iOS开发之网络编程:同步,异步请求差异及用法
- RecyclerView官方文档翻译
- android学习记录(十三)Task 和 Activity 回退栈操作。
- hihoCoder #1142 : 三分求极值
- JavaScript:关于事件处理程序何时可以直接访问元素的属性
- IOS关于UIViewController之间的切换
- C#图片上一张下一张
- 解决 Git 冲突的 14 个建议和工具