摘要:
原题链接错排公式:当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用D(n)表示,那么D(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推.第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法;第二步,放编号为k的元素,这时有两种情况:⑴把它放到位置n,那么,对于剩下的n-1个元素,由于第k个元素放到了位置n,剩下n-2个元素就有D(n-2)种方法;⑵第k个元素不把它放到位置n,这时,对于这n-1个元素,有D(n-1)种方法;综上得到D(n) = (n-1) [D(n-2) + D(n-1)]特殊地,D(1) = 0, D(2) = 阅读全文
摘要:
当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用D(n)表示,那么D(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推.第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法;第二步,放编号为k的元素,这时有两种情况:⑴把它放到位置n,那么,对于剩下的n-1个元素,由于第k个元素放到了位置n,剩下n-2个元素就有D(n-2)种方法;⑵第k个元素不把它放到位置n,这时,对于这n-1个元素,有D(n-1)种方法;综上得到D(n) = (n-1) [D(n-2) + D(n-1)]特殊地,D(1) = 0, D(2) = 1.-----百度 阅读全文
摘要:
原题链接当N=1、2、3时可以直接求出F[N]。当N>3时可得递推关系F[N]=F[N-1]+2*F[N-2];#include __int64 a[51] = {0, 3, 6, 6};int main(){ int n; for(int i = 4; i != 51; ++i) a[i] = a[i - 1] + a[i - 2] * 2; while(scanf("%d", &n) == 1) printf("%I64d\n", a[n]); return 0;} 阅读全文
摘要:
原题链接关键思路是:每增加N个交点就增加N+1部分平面。然后从最简单的情况开始找到递推关系。//a[n] = a[n-1] + 4 * (n - 1) + 1#include #define MAX 10000 + 2__int64 a[MAX] = {1, 2, 7};int main(){ int t, i; for(i = 3; i != MAX; ++i) a[i] = a[i - 1] + 4 * i - 3; scanf("%d", &t); while(t-- && scanf("%d", &i)) prin 阅读全文
摘要:
原题链接思路:先小到大排序,从最大的开始比较,如果An>Bn,则直接赢掉这局;如果An#include int a[1001], b[1001];int cmp(const void *a, const void *b){ return *(int *)a - *(int *)b;}int main(){ int n, count, i; int ax, ay, bx, by; while(scanf("%d", &n), n){ count = 0; for(i = 0; i != n; ++i) scanf("%d", &a[i 阅读全文
摘要:
原题链接思路:先小到大排序,从最大的开始比较,如果An>Bn,则直接赢掉这局;如果An#include int a[1001], b[1001];int cmp(const void *a, const void *b){ return *(int *)a - *(int *)b;}int main(){ int n, count, i; int ax, ay, bx, by; while(scanf("%d", &n) == 1){ count = 0; for(i = 0; i != n; ++i) scanf("%d", &a 阅读全文
摘要:
原题链接郁闷,WA了3次,好在最终找到了原因,qsort的cmp函数有问题,对于浮点数,比较的时候一定要注意。#include #include struct Node{ int x, y; double rate;};int cmp(const void *a, const void *b){ if ((*(Node *)b).rate - (*(Node *)a).rate 0 && i < n; ++i){ if(a[i].y <= m){ s += a[i].x; m -= a[i].y; }else{ s += m * a[i].rate; brea... 阅读全文