很水的一道题,就是在排好序的数列中所选的部分断开,前后即满足。
#include<stdio.h>
long long C[100][100];
void init()
{
int i,j;
C[1][0]=C[1][1]=C[0][0]=1;
for(i=2;i<=100;i++)
{
C[i][0]=1;
for(j=1;j<=100;j++)
{
if(j==i) C[i][i]=1;
else C[i][j]=(C[i-1][j-1]+C[i-1][j]);
}
}
}
int main()
{
int n,i;
init();
long long total;
while(scanf("%d",&n)!=EOF)
{
total=0;
for(i=2;i<=n;i++)
{
total+=C[n][i]*(i-1);
}
printf("%lld\n",total);
}
}