随笔分类 - 组合数学
摘要:题意:将一个整数 n 进行无序拆分,一共有2^(n-1)种;输入一个整数 k ,问 k 在所有拆分中出现的次数。分析:a[n][k]=a[i][k]+2^(n-k-1);(k=3),而对所有的 k 都有a[k][k]=1,a[k+1][k]=2,........所以数组a的值与第二维k无关。那么 a[k]=1,a[k+1]=2,...;令n=n-k+1;即可以表示为 a[1]=1,a[2]=2,...a[n]=2*a[n-1]+2^(n-3)。最终得到 a[n]=2^(n-1)+(n-2)*2^(n-3);将n=n-k+1代入得:a[n-k+1]=2^(n-k)+(n-k-1)*2^(n-k-
阅读全文
摘要:#include
#include
int main()
{ int i,j,k,n,a[18][301]; memset(a,0,sizeof(a)); for(i=0;i<301;i++) a[1][i]=1; for(i=2;i<18;i++) { for(j=0;j<301;j++) for(k=0;j+i*i*k<301;k++) a[i][j+i*i*k]+=a[i-1][j]; } while(scanf("%d",&n)==1 && n...
阅读全文
摘要:#include
int main(void)
{ int n, i; __int64 g[34] = {1}; __int64 d[34] = {0}; for (i = 1; i < 34; i++) { g[i] = 3 * g[i - 1] + 2 * d[i - 1]; d[i] = g[i - 1] + d[i - 1]; } while (scanf("%d", &n), n != -1) printf("%I64d, %I64d\n", g[n], d[n]); re...
阅读全文
摘要:#include
int main()
{ __int64 i,n,a[36],j=0; a[1]=2; for(i=2;i<36;i++) { a[i]=2*(a[i-1]*2-a[i-1]*3/(i+1)); } while(scanf("%I64d",&n)==1 && n!=-1) { j++; printf("%I64d %I64d ",j,n); printf("%I64d\n",a[n]); } return 0;
}
阅读全文
摘要:#include
#include
#define N 8010
int main()
{ int i,j,k,n1,n2,n3,a[N],b[N],c[N]; while(scanf("%d%d%d",&n1,&n2,&n3)==3 && (n1 || n2 || n3)) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c));k=0; for(i=0;i<=n1;i++) a[i]=1; ...
阅读全文
摘要:#include
int main()
{ int i,n,c; double a[21]; a[1]=0;a[2]=1; for(i=3;i1;i--) a[n]/=i; printf("%.2lf%%\n",a[n]*100.0); } return 0;
}
阅读全文
摘要:// Time 0ms, Memory 404K#include
int a[255][105],temp[255][105];
int val[6]={0,1,5,10,25,50};
int num[255]={0};
int main()
{ int i,j,k,t,n; a[0][0]=1; for(i=1;i<=5;i++) { for(j=0;j<=250;j++) for(k=0;j+k*val[i]<=250;k++) for(t=0;t+k<=100;t++) temp[j+k*val[i]][t+k]+=a[j][t]; for(j...
阅读全文