找规律,递推
菜鸟起航
这个作者很懒,什么都没留下…
展开
-
hdu 1394
/*分析:a[0]的逆序数为0,a[0]后边有a[0]个比a[0]小的数,将a[0]移到末尾是,a[0]的逆序数变成n-1-a[0];而a[0]个比a[0]小的数的逆序数都减1,设原序列的逆序数为sum,则新序列的逆序数sum=sum-a[0]+n-1-a[0];当m>1时,sum=sum(m-1)+n-1-a[0]-a[0];a[0]是m-1次移动后序列的首元素。*/原创 2013-05-17 12:04:31 · 664 阅读 · 0 评论 -
hdu 2502
昨天找出来的二进制数1出现的规律今天又遇到这样的题0位上每2个数后1个数有1,,即奇数1位上每4个数后2个有1,2位上每8个数后4个有1,.......。。。。。。。。。。。。。。#includeint a[21],b[21];int find(int n)//0到n共出现多少个1{ int i; n=n+1; int原创 2013-05-25 12:00:13 · 926 阅读 · 0 评论 -
hdu 4556
//每一行增加的个数是欧拉函数的2倍#include#define N 1000001int a[N],b[N];int main(){ int i,j,n; __int64 sum; for(i=2;i<N;i++) a[i]=i; for(i=2;i<N;i++) { if(b[i]==1)continue; a[i]=i-1; for(j=i原创 2013-05-24 20:30:44 · 731 阅读 · 0 评论 -
hdu 3485
记录后两位,共有4种情况00->001->110->211->3;dp[i][0]=dp[i-1][0]+dp[i-1][2];dp[i][1]=dp[i-1][0];dp[i][2]=dp[i-1][1]+dp[i-1][3];dp[i][3]=dp[i-1][1]+dp[i-1][3];#include#include#inclu原创 2013-05-22 15:49:54 · 866 阅读 · 1 评论 -
hdu 2608
先打表找出T[i]%2=1的i有哪些发现规律T[i*i]=1和T[2*i*i]=1#include#includeint main(){ int i,j,n,t,sum; scanf("%d",&t); while(t--) { scanf("%d",&n); sum=0; for(i=1;i<=n;i++) {原创 2013-05-22 15:39:07 · 777 阅读 · 0 评论 -
hdu 2512
dp[i][j]=(dp[i-1][j-1]+j*dp[i-1][j]) #includeint dp[2001][2001];int main(){ int i,j,k; for(i=1;i<=2000;i++) { dp[i][1]=1; dp[i][i]=1; } for(i=2;i<=2000;i++) { f原创 2013-05-20 21:13:56 · 793 阅读 · 0 评论 -
hdu 2065
一看觉得是指数型母函数的题,给的数据太大,所以肯定是有规律的用指数型母函数求了23项就出现周期了 #include#includeint a[20]={20,72,72,56,60,12,92,56,0,52,12,56,40,92,32,56,80,32,52,56};int main(){ int t,op; __int64 n; wh原创 2013-05-07 12:14:57 · 806 阅读 · 0 评论 -
hdu 1794
方格填数 求出每个为0的方格在多少个s*s的中当n==30时达到2000多,和超int #include#include#includeint map[31][31],a[10010];struct op{ int num,count;}p[31][31];struct ed{ int x,y,cnt;}e[1原创 2013-05-06 10:21:12 · 910 阅读 · 0 评论 -
hdu 1703 PBD
找规律当大于五个人时每加一个人只要把这个人的想法传出去给其余一人,再从剩下的任何一人知道所有人的想法,每加一个人就加两次费用c[n]=c[n-1]+10(n>=5) #includeint f[5];int main(){ int i,j,n; f[1]=0;f[2]=1;f[3]=3;f[4]=4; for(i=5;i<100;i++) f原创 2013-05-04 19:00:15 · 871 阅读 · 0 评论 -
hdu 1992
找规律dp[i]=d[i-1]+4*dp[i-2]+2*(dp[i-3]+dp[i-5],,,,,,,,,)+3*(dp[i-4]+dp[i-6]+,,,,,,,);#includeint dp[1001];int main(){ dp[0]=1;dp[1]=1;dp[2]=5; int i,j,t,op,n; for(i=3;i<=1000;i++)原创 2013-05-17 15:55:24 · 756 阅读 · 0 评论