以下是引用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;
}
