/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
class Mse4089130 {
final int N; // 10
final int M; // 7
final int K; // 5 (sum must be less than K)
final int S; // 2^(7-1) = 64
final long[] st; // states (indexed from 0 to S-1
int t = 0;
public Mse4089130(int n, int m, int k) {
N = n;
M = m;
K = k;
S
= (int) Math.
pow(2, M
- 1); st = new long[S];
st[0] = 1;
}
public void compute() {
for (int tt = 1; tt <= N; tt++) {
t = tt;
long[] stold
= Arrays.
copyOf(st, st.
length); for (int x = 0; x < S; x++) {
st[evolve(x, false)] += stold[x];
if (weight(x) < K - 1)
st[evolve(x, true)] += stold[x];
}
}
}
long count() {
long ac = 0; for (long x : st) ac += x; return ac;
}
int evolve(int x, boolean one) {
return one ? x / 2 + S / 2 : x / 2;
}
int weight(int n) {
}
@Override
return "[t=" + t + " count=" + count() + " N=" + N + ", M=" + M + ", K=" + K + ", S=" + S + "]";
}
public static void main
(String[] args
) { Mse4089130 mse = new Mse4089130(10, 7, 5);
System.
out.
println(mse.
toString()); mse.compute();
System.
out.
println(mse.
toString()); System.
out.
println(mse.
count()); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBNc2U0MDg5MTMwIHsKCWZpbmFsIGludCBOOyAvLyAxMAoJZmluYWwgaW50IE07IC8vIDcKCWZpbmFsIGludCBLOyAvLyA1IChzdW0gbXVzdCBiZSBsZXNzIHRoYW4gSykKCWZpbmFsIGludCBTOyAvLyAyXig3LTEpID0gNjQKCWZpbmFsIGxvbmdbXSBzdDsgLy8gc3RhdGVzIChpbmRleGVkIGZyb20gMCB0byBTLTEKCWludCB0ID0gMDsKCglwdWJsaWMgTXNlNDA4OTEzMChpbnQgbiwgaW50IG0sIGludCBrKSB7CgkJTiA9IG47CgkJTSA9IG07CgkJSyA9IGs7CgkJUyA9IChpbnQpIE1hdGgucG93KDIsIE0gLSAxKTsKCQlzdCA9IG5ldyBsb25nW1NdOwoJCXN0WzBdID0gMTsKCX0KCglwdWJsaWMgdm9pZCBjb21wdXRlKCkgewoJCWZvciAoaW50IHR0ID0gMTsgdHQgPD0gTjsgdHQrKykgewoJCQl0ID0gdHQ7CgkJCWxvbmdbXSBzdG9sZCA9IEFycmF5cy5jb3B5T2Yoc3QsIHN0Lmxlbmd0aCk7CgkJCUFycmF5cy5maWxsKHN0LCAwKTsKCQkJZm9yIChpbnQgeCA9IDA7IHggPCBTOyB4KyspIHsKCQkJCXN0W2V2b2x2ZSh4LCBmYWxzZSldICs9IHN0b2xkW3hdOwoJCQkJaWYgKHdlaWdodCh4KSA8IEsgLSAxKQoJCQkJCXN0W2V2b2x2ZSh4LCB0cnVlKV0gKz0gc3RvbGRbeF07CgkJCX0KCQl9Cgl9CgoJbG9uZyBjb3VudCgpIHsKCQlsb25nIGFjID0gMDsgZm9yIChsb25nIHggOiBzdCkgYWMgKz0geDsJcmV0dXJuIGFjOwoJfQoKCWludCBldm9sdmUoaW50IHgsIGJvb2xlYW4gb25lKSB7CgkJcmV0dXJuIG9uZSA/IHggLyAyICsgUyAvIDIgOiB4IC8gMjsKCX0KCglpbnQgd2VpZ2h0KGludCBuKSB7CgkJcmV0dXJuIEludGVnZXIuYml0Q291bnQobik7Cgl9CgoJQE92ZXJyaWRlCglwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewoJCXJldHVybiAiW3Q9IiArIHQgKyAiIGNvdW50PSIgKyBjb3VudCgpICsgIiBOPSIgKyBOICsgIiwgTT0iICsgTSArICIsIEs9IiArIEsgKyAiLCBTPSIgKyBTICsgIl0iOwoJfQoKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKCQlNc2U0MDg5MTMwIG1zZSA9IG5ldyBNc2U0MDg5MTMwKDEwLCA3LCA1KTsKCQlTeXN0ZW0ub3V0LnByaW50bG4obXNlLnRvU3RyaW5nKCkpOwoJCW1zZS5jb21wdXRlKCk7CgkJU3lzdGVtLm91dC5wcmludGxuKG1zZS50b1N0cmluZygpKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4obXNlLmNvdW50KCkpOwoJfQp9Cg==