首页 > 代码库 > 简单递推专题
简单递推专题
Computer Transformation
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6084 Accepted Submission(s): 2222
How many pairs of consequitive zeroes will appear in the sequence after n steps?
HDU 1041 、找规律+大数
import java.util.*;import java.math.*;public class Main{ public static void main(String argc[]) { Scanner cin=new Scanner(System.in); int n,i; BigInteger a[]=new BigInteger [1005]; BigInteger c=new BigInteger("2"); a[1]=new BigInteger("0"); a[2]=new BigInteger("1"); for(i=3;i<=1000;i++) { a[i]=a[i-2].multiply(c).add(a[i-1]); } while(cin.hasNext()) { n=cin.nextInt(); System.out.println(a[n]); } } }
不容易系列之(3)—— LELE的RPG难题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 31541 Accepted Submission(s): 12610
有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法.
以上就是著名的RPG难题.
如果你是Cole,我想你一定会想尽办法帮助LELE解决这个问题的;如果不是,看在众多漂亮的痛不欲生的Cole女的面子上,你也不会袖手旁观吧?
#include <iostream>#include <cstdio>using namespace std;#define ll __int64int main(){ int n,i; ll q[52]; q[1]=3; q[2]=6; q[3]=6; for(i=4;i<=50;i++) { q[i]=2*q[i-2]+q[i-1]; } while(scanf("%d",&n)!=EOF) { printf("%I64d\n",q[n]); } return 0;}
阿牛的EOF牛肉串
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 21737 Accepted Submission(s): 10202
你,NEW ACMer,EOF的崇拜者,能帮阿牛算一下一共有多少种满足要求的不同的字符串吗?
PS: 阿牛还有一个小秘密,就是准备把这个刻有 EOF的牛肉干,作为神秘礼物献给杭电五十周年校庆,可以想象,当校长接过这块牛肉干的时候该有多高兴!这里,请允许我代表杭电的ACMer向阿牛表示感谢!
再次感谢!
#include <iostream>#include <cstdio>using namespace std;int main(){ int n; __int64 q[42]={0,3,8}; for(int i=3;i<40;i++) { q[i]=2*(q[i-1]+q[i-2]); } while(scanf("%d",&n)!=EOF) { printf("%I64d\n",q[n]); } return 0;}
超级楼梯
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 32075 Accepted Submission(s): 16540
#include<iostream>#include<cstdio>using namespace std;int a[41];void Find(){ a[1]=1; a[2]=2; for(int i=3;i<=40;i++) { a[i]=a[i-1]+a[i-2]; }}int main(){ int T,n; Find(); scanf("%d",&T); while(T--) { scanf("%d",&n); cout<<a[n-1]<<endl; } return 0;}
骨牌铺方格
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 30647 Accepted Submission(s): 14837
例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:
#include <iostream>#include <cstdio>using namespace std;#define ll __int64int main(){ int n; ll q[52]; q[1]=1; q[2]=2; for(int i=3;i<=50;i++) { q[i]=q[i-1]+q[i-2]; } while(scanf("%d",&n)!=EOF) { printf("%I64d\n",q[n]); } return 0;}
不容易系列之(4)——考新郎
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 23029 Accepted Submission(s): 8451
首先,给每位新娘打扮得几乎一模一样,并盖上大大的红盖头随机坐成一排;
然后,让各位新郎寻找自己的新娘.每人只准找一个,并且不允许多人找一个.
最后,揭开盖头,如果找错了对象就要当众跪搓衣板...
看来做新郎也不是容易的事情...
假设一共有N对新婚夫妇,其中有M个新郎找错了新娘,求发生这种情况一共有多少种可能.
#include <iostream>#include <cstdio>using namespace std;#define ll __int64ll C(ll n,ll m){ if(m==0) return 1; return C(n,m-1)*(n-m+1)/m;}int main(){ int n,m,i,T; ll q[22]; q[0]=1; q[1]=0; for(i=2;i<=20;i++) { q[i]=(i-1)*(q[i-2]+q[i-1]); } scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); printf("%I64d\n",q[m]*C(n,n-m)); } return 0;}
母牛的故事
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 45118 Accepted Submission(s): 22390
n=0表示输入数据的结束,不做处理。
每个输出占一行。
HDU 2018
#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define ll long long#define N 55ll a[N+2];int main(){ int i,n; a[1]=1; a[2]=2; a[3]=3; for(i=4;i<55;i++) { a[i]=a[i-3]+a[i-1]; } while(cin>>n && n) { cout<<a[n]<<endl; } return 0;}
神、上帝以及老天爷
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 23655 Accepted Submission(s): 9896
为了活跃气氛,组织者举行了一个别开生面、奖品丰厚的抽奖活动,这个活动的具体要求是这样的:
首先,所有参加晚会的人员都将一张写有自己名字的字条放入抽奖箱中;
然后,待所有字条加入完毕,每人从箱中取一个字条;
最后,如果取得的字条上写的就是自己的名字,那么“恭喜你,中奖了!”
大家可以想象一下当时的气氛之热烈,毕竟中奖者的奖品是大家梦寐以求的Twins签名照呀!不过,正如所有试图设计的喜剧往往以悲剧结尾,这次抽奖活动最后竟然没有一个人中奖!
我的神、上帝以及老天爷呀,怎么会这样呢?
不过,先不要激动,现在问题来了,你能计算一下发生这种情况的概率吗?
不会算?难道你也想以悲剧结尾?!
HDU 2048 错排
#include <iostream>#include <cstdio>using namespace std;#define ll __int64int main(){ int n,i,T; ll q[22]; q[0]=1; q[1]=0; for(i=2;i<=20;i++) { q[i]=(i-1)*(q[i-2]+q[i-1]); } scanf("%d",&T); while(T--) { scanf("%d",&n); ll ans1=q[n]; ll ans2=1; for(i=1;i<=n;i++) { ans2*=i; } printf("%.2f%%\n",q[n]*1.0/ans2*100); } return 0;}
一只小蜜蜂...
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 41359 Accepted Submission(s): 15106
其中,蜂房的结构如下所示。
HDU 2044 斐波拉契
#include <iostream>#include <cstdio>#include <cmath>using namespace std;#define ll __int64int main(){ int T; ll q[52]; q[1]=1; q[2]=2; for(int i=3;i<50;i++) { q[i]=q[i-1]+q[i-2]; } scanf("%d",&T); while(T--) { int a,b,c; scanf("%d%d",&a,&b); c=abs(b-a); printf("%I64d\n",q[c]); } return 0;}
折线分割平面
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 17520 Accepted Submission(s): 12085
HDU 2050
#include <iostream>using namespace std;int main(){ int n,T; cin>>T; while(T--) { cin>>n; cout<<2*n*n-n+1<<endl; } return 0;}
简单递推专题