Leetcode 周賽 219 題解
阿新 • • 發佈:2020-12-17
1688. 比賽中的配對次數
共有n個隊伍,一個冠軍,需要淘汰n-1個 隊伍。
每一場比賽淘汰一個隊伍,因此進行了n-1場比賽。
所以共有n-1個配對。
class Solution {
public:
int numberOfMatches(int n) {
return n - 1;
}
};
**1689.十-二進位制數的最少數目 **
簡單思維
返回所給的字串中最大的那個數便可以
class Solution { public: int minPartitions(string n) { int x = 0; for(int i = 0 ;i < n.size(); i ++){ x = max(x,n[i] - '0'); } return x; } };
1690. 石子游戲 VII
字首和+區間DP+博弈論
博弈論:最壞的情況取最好的
\[f[i,j]表示在區間[i,j],先手-後手的分值最大\\ s[i,j]表示在區間的和\\ 決策:先手決定取i還是取j,當取i時,分值為s[i+1,j]-f[i+1][j],當取j時,分值為s[i,j-1]-f[i][j-1] \]class Solution { public: int stoneGameVII(vector<int>& stones) { int n = stones.size(); vector<int> s(n+1); for(int i = 1;i <= n;i ++){ s[i] = s[i-1] + stones[i-1]; } vector<vector<int>> f(n+1,vector<int>(n+1)); for(int len = 2;len <= n;len ++){ for(int i = 1;i + len - 1 <= n;i ++){ int j = i + len - 1; f[i][j] = max(s[j] - s[i] - f[i+1][j],s[j-1] - s[i-1] - f[i][j-1]); } } return f[1][n]; } };
1691. 堆疊長方體的最大高度
最大下降子序列
當存在一種方案滿足條件時
\[a_1>a_2\\ b_1>b_2\\ c_1>c_2\\ 對其進行排序之後,仍然滿足條件 \]滿足條件
\[1.合法\\ 2.c[i]最大且為高\\ \]class Solution { public: int maxHeight(vector<vector<int>>& w) { for(auto &x : w) sort(x.begin(),x.end()); sort(w.begin(),w.end(),greater<vector<int>>()); int n = w.size(); vector<int> f(n + 1); int res = 0; for(int i = 0; i < n;i ++){ f[i] = w[i][2]; for(int j = 0;j < i;j ++){ if(w[j][0] >= w[i][0] && w[j][1] >= w[i][1] && w[j][2] >= w[i][2]) f[i] = max(f[i],f[j] + w[i][2]); } res = max(res,f[i]); } return res; } };