#include <stdio.h>
#include <string.h>
#include <math.h>
int Num[101][101],Add[101][101];
int n ,k;
int main()
{
memset(Num,0,sizeof(Num));
memset(Add,0,sizeof(Add));
Add[3][1]=1,Add[3][2]=0,Add[3][3]=0;
Add[4][1]=1,Add[4][2]=2,Add[4][3]=2,Add[4][4]=2;
Add[5][1]=1,Add[5][2]=6,Add[5][3]=12,Add[5][4]=18,Add[5][5]=24;
int i, j;
for(i=6;i<=100;i++)
{
Add[i][2]=(int)pow(2,i-2)-2;
for(j=3;j<=i;j++)
Add[i][j]=Add[i-1][j-1]+Add[i][j-1];
}
for(i=3;i<=100;i++)
{
Num[i][1]=1;
for(j=2;j<=i;j++)
Num[i][j]=Num[i][j-1]+Add[i][j];
}
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
printf("%d\n",Num[n][n-k+1]);
}
return 0;
}
结果是错的。。。。
#include <string.h>
#include <math.h>
int Num[101][101],Add[101][101];
int n ,k;
int main()
{
memset(Num,0,sizeof(Num));
memset(Add,0,sizeof(Add));
Add[3][1]=1,Add[3][2]=0,Add[3][3]=0;
Add[4][1]=1,Add[4][2]=2,Add[4][3]=2,Add[4][4]=2;
Add[5][1]=1,Add[5][2]=6,Add[5][3]=12,Add[5][4]=18,Add[5][5]=24;
int i, j;
for(i=6;i<=100;i++)
{
Add[i][2]=(int)pow(2,i-2)-2;
for(j=3;j<=i;j++)
Add[i][j]=Add[i-1][j-1]+Add[i][j-1];
}
for(i=3;i<=100;i++)
{
Num[i][1]=1;
for(j=2;j<=i;j++)
Num[i][j]=Num[i][j-1]+Add[i][j];
}
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
printf("%d\n",Num[n][n-k+1]);
}
return 0;
}