#include #include #include #include #include #include #include #include #include #include using namespace std; int main(){ int n,L; cin >> n >> L; L *= 60; vector S(n); int sum = 0; for(int i=0; i dp[i-1][j][k] = dp[i][j][k] - dp[i-1][j-1][k-S[i-1]] としてiを使わなかった組み合わせへ戻せる dp[n-1][j][k] = dp[n][j][k] - dp[n-1][j-1][k-S[n-1]] ここでn-1は任意 dp[n-1][j][k] = dp[n][j][k] - dp[n-1][j-1][k-S[n-1]] dp__[j][k] = dp[j][k] - dp__[j-1][k-S[n-1]] */ vector> dp(n+1, vector(sum+1, 0)); dp[0][0] = 1; for(int i=0; i fact(n+10,1); for(int i=1; i> dp__(n+1, vector(sum+1, 0)); for(int i=0; i=0 && k-S[i]>=0)? dp__[j-1][k-S[i]] : 0); if(k