完美世界C++笔试
这两题是之前华科宣讲会的原题,当时没有全部做出来,这次都做出来了。
- M个苹果放在N个盘子里,盘子可以为空
#include <bits/stdc++.h> using namespace std; //x个苹果放y个盘子,不能空 int f(int x, int y); //x个苹果放y个盘子,能空 int g(int x, int y); int f(int x, int y) { if (x == y || y == 1) { return 1; } return g(x - y, y); } int g(int x, int y) { int sum = 0; for (int i = 1; i <= x && i <= y; ++i) { sum += f(x, i); } return sum; } int main() { int M, N; cin >> M >> N; cout << g(M, N) << endl; }
- 有n个冰面,每个冰面下有一定数量的鱼,现在要打碎冰面捕鱼,但是相邻冰面不能被打碎。
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; vector<int> fish(n); vector<vector<int>> op(n, vector<int>(2)); for (int i = 0; i < n; ++i) { cin >> fish[i]; } op[0][0] = 0; op[0][1] = fish[0]; for (int i = 1; i < fish.size(); ++i) { op[i][0] = max(op[i - 1][0], op[i - 1][1]); op[i][1] = op[i - 1][0] + fish[i]; } cout << max(op.back()[0], op.back()[1]) << endl; }