|
|
这道题目的解题思路是动态规划,通过N和K进行状态转移
#include <cstdio>#include <cmath>int a[40][900];int n,k;void work(){a[1][1]=1;for(int i=2;i<=n;i++){for(int j=0;j<=(i+1)*i/2;j++){a[i][j]=0;if((i+j)<=(i-1)*i/2){a[i][j]+=a[i-1][i+j];}if(j!=0){if(i>=j)a[i][j]+=a[i-1][i-j];if(i<=j)a[i][j]+=a[i-1][j-i];}//printf("%d %d %d\n",i,j,a[i][j]);}}}int main(){scanf("%d%d",&n,&k);if(k>(n+1)*n/2){printf("0\n");}else{work();printf("%d\n",a[n][k]);}return 0;} |
|