#include #include #include using namespace std ; const long long MOD = 1000000007 ; const int MAXN = 320 ; long long prob[MAXN][2][MAXN][MAXN] ; int N, K ; long long recur(int lessleft, int eqleft, int greatleft, int lessinhand) { if (lessleft < 0 || greatleft < 0 || eqleft < 0) return 0 ; long long r = prob[lessleft][eqleft][greatleft][lessinhand] ; if (r == -1) { int numleft = lessleft + greatleft + eqleft ; int nlessinhand = lessinhand ; if (numleft == 0) r = K - lessinhand ; else if (numleft <= N-K) { if (lessinhand) nlessinhand-- ; else if (eqleft == 0) { r = (numleft + K) ; for (int i=0; i> N >> K ; for (int i=0; i<=N; i++) for (int j=0; i+j<=N; j++) for (int k=0; i+j+k<=N; k++) prob[i][0][j][k] = prob[i][1][j][k] = -1 ; vector v(N) ; for (int i=0; i> v[i] ; sort(v.begin(), v.end()) ; long long osum = 0 ; for (int i=0; i