HDOJ 1121 Complete the Sequence
【题目大意】
有一个数列P,它的第i项是当x=i时,一个关于x的整式的值。
给出数列的前S项,你需要输出它的第S+1项到第S+C项,并且使整式的次数最低。
多测。
【数据范围】
数据组数≤5000,S+C≤100
思路:使用差分的方法进行解题,然后再逆向回去
实例:
原数列1,2,4,7,11,16,22,29……
第一次相减:1,2,3,4,5,6,7……
第二次相减:1,1,1,1,1,1……
所有元素都相同了
所以下一项就是1+7+29=37,再下一项是1+8+37=46
1 #include<stdio.h> 2 #define NN 102 3 int main() 4 { 5 int T, i, j, S, C; 6 int f[NN][NN]; 7 scanf("%d", &T); 8 while (T--){ 9 scanf("%d%d", &S, &C); 10 for (i = 0; i < S; i++) 11 scanf("%d", &f[0][i]); 12 for (i = 1; i < S; i++) 13 for (j = 0; i + j < S; j++) 14 f[i][j] = f[i - 1][j + 1] - f[i - 1][j]; 15 for (i = 1; i <= C; i++) 16 f[S - 1][i] = f[S - 1][0]; 17 for (i = S - 2; i >= 0; i--) 18 for (j = S - i; j < C + S; j++) 19 f[i][j] = f[i][j - 1] + f[i + 1][j - 1]; 20 for (i = S; i < S + C - 1; i++) 21 printf("%d ", f[0][i]); 22 printf("%d\n", f[0][i]); 23 } 24 return 0; 25 }