#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#include const double EPS = (1e-10); using namespace std; using Int = long long; //using namespace boost::multiprecision; const Int MOD = 1000000007; Int mod_pow(Int x, Int n) { Int res = 1; while(n > 0) { if(n & 1) res = (res * x) % MOD; //ビット演算(最下位ビットが1のとき) x = (x * x) % MOD; n >>= 1; //右シフト(n = n >> 1) } return res; } Int dp[2][15005]; Int p[5001][4]; int main(){ cin.tie(0); int N, P; cin >> N >> P; for (int i = 0; i < N; i++){ cin >> p[i][0] >> p[i][1] >> p[i][2]; p[i][3] = 1; } //dp init for (int i = 0; i < 4; i++){ dp[0][i] = p[0][i]; } Int INF = 1e10; for (int i = 1; i < N; i++){ for (int j = 0; j < (i+1)*3+1; j++){ dp[i%2][j] = INF; for (int k = 0; k < 4; k++){ if (j-k < 0) continue; if (j-k > (i)*3) continue; dp[i%2][j] = min(dp[i%2][j], dp[(i-1)%2][j-k] + p[i][k]); } } } printf("%f\n", dp[(N-1)%2][P]/(double)N); }