c# : Easy Solution
\tpublic class Solution\n\t{\n\t\tpublic int MinSessions(int[] tasks, int sessionTime)\n\t\t{\n\t\t\tint[,] dp = new int[(1 << tasks.Length), sessionTime + 1];\
\tpublic class Solution\n\t{\n\t\tpublic int MinSessions(int[] tasks, int sessionTime)\n\t\t{\n\t\t\tint[,] dp = new int[(1 << tasks.Length), sessionTime + 1];\n\t\t\treturn Solve(tasks, sessionTime, dp, 0, 0);\n\t\t}\n\n\t\tpublic int Solve(int[] tasks, int sessionTime, int[,] dp, int taken, int currTime)\n\t\t{\n\t\t\tif (taken == (1 << tasks.Length) - 1)\n\t\t\t\treturn 1;\n\n\t\t\tif (dp[taken, currTime] != 0)\n\t\t\t\treturn dp[taken, currTime];\n\n\t\t\tint ans = int.MaxValue;\n\t\t\tfor(int i = 0; i < tasks.Length; i++)\n\t\t\t{\n\t\t\t\tif ((taken & (1 << i)) > 0)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif (currTime + tasks[i] <= sessionTime)\n\t\t\t\t\tans = Math.Min(ans, Solve(tasks, sessionTime, dp, taken | (1 << i), currTime + tasks[i]));\n\t\t\t\telse\n\t\t\t\t\tans = Math.Min(ans, 1 + Solve(tasks, sessionTime, dp, taken | (1 << i), tasks[i]));\n\t\t\t}\n\n\t\t\tdp[taken, currTime] = ans;\n\t\t\treturn ans;\n\t\t}\n\t}
['Backtracking', 'Bit Manipulation', 'Bitmask']