以下是引用jiangwu10057在2010-1-30 17:46:24的发言:
我还是先想清楚为什么是哪个算法好了毕竟程序=算法+数据结构
我还是先想清楚为什么是哪个算法好了毕竟程序=算法+数据结构
显然,都走歪了,这个题目是用加法算的。。。
不是用乘法。
#include<stdio.h> #include<string.h> #define M 2001 int ans[M][M]; int dp(int m, int n) { int i; if(ans[m][n]!=-1) return ans[m][n]; ans[m][n] = 0; for(i=m-1; i<n; i++) ans[m][n] += dp(m-1, i); return ans[m][n]%=1007; } int T; int m, n; int main(void) { int i; memset(ans, -1, sizeof(ans)); for(i=1; i<M; i++) ans[1][i] = i%1007; scanf("%d", &T); while(T --) { scanf("%d %d", &m, &n); printf("%d\n", dp(m, n)); } return 0; }
#include<stdio.h> #include<string.h> #define M 2001 int ans[M][M]; int main(void) { int i, j; int T, m, n; for(i=1; i<M; i++) ans[1][i] = i; for(i=2; i<M; i++) { for(j=1; j<M; j++) ans[i][j] = (ans[i-1][j-1] + ans[i][j-1]) % 1007; } scanf("%d", &T); while(T --) { scanf("%d %d", &m, &n); printf("%d\n", ans[m][n]); } return 0; }