京东2016校园机考题目——寻宝游戏问题

来源:互联网 发布:php urlencode加号 编辑:程序博客网 时间:2024/05/21 12:14

没有报京东,看QQ群里别人做题,居然这么难,做了一下寻宝问题,花了2个小时敲打

#include <cmath>int Cmn(int m, int n) {if (m == 0)return 1;if (n == 0)return 1;if (m ==n)return 1;if (n > m / 2)n = m - n;double sum = 0.0;for (int i = m;i >= m - n + 1;i--) sum += log((double)i);for (int i = 1;i <= n;i++)sum -= log((double)i);sum -= log(1000000007.0);return round((exp(sum)-(int)exp(sum))*1000000007.0);}void means(vector<vector<int> >& in, int n, int m, vector<int> values,int K,int * counts) {int N = in.size();int M = in[0].size();if (n == N || m == M) {return;}if (values.empty())values.push_back(-1);if (values.size() == K) {means(in, n + 1, m, values, K, counts);means(in, n, m+1, values, K, counts);if (in[n][m] > values.back()){*counts += Cmn(N - n + M - m - 2, N - n - 1);*counts %= 1000000007;}}else {means(in, n + 1, m, values, K, counts);means(in, n , m+1, values, K, counts);if (in[n][m] > values.back()) {values.push_back(in[n][m]);means(in, n + 1, m, values, K, counts);means(in, n, m + 1, values, K, counts);}}}int main() {int n, m, k;cin >> n >> m >> k;int counts=0;vector<vector<int> > in;int tmp;for (int i = 0;i < n;i++){vector<int>vtmp;for (int j = 0;j < m;j++){cin >> tmp;vtmp.push_back(tmp);}in.push_back(vtmp);}vector<int>values;means(in, 0, 0, values, k, &counts);cout << counts << endl;return 0;}

测试用例

3 3 2

1 3 2

3 2 4

5 3 9

手算51,机算51. 其他几个例子也通过了,不知道是不是可以通过京东的测试!


 




0 0
原创粉丝点击