【2022-06-19-第298场单周赛】

总结
最后一题大胆试一下就好了,挺简单的。
Q1.兼具大小写的最好英文字母
直接用哈希一顿搞。
class Solution {
public:
long long sellingWood(int m, int n, vector<vector<int>>& p) {
long long dp[m + 1][n + 1]; memset(dp, 0, sizeof(dp));
map<pair<int, int>, long long> mp;
for(auto &i : p){
mp[{i[0], i[1]}] = max(mp[{i[0], i[1]}], i[2]);
}
for(int i = 1; i <= m; ++i){
for(int j = 1; j <= n; ++j){
dp[i][j] = mp[{i, j}];
for(int k = 1; k <= i - 1; ++k) dp[i][j] = max(dp[k][j], dp[i - k][j]);
for(int k = 1; k <= j - 1; ++k) dp[i][j] = max(dp[i][k], dp[i][j - k]);
}
}
return dp[m][n];
}
};
Q2.个位数字为 K 的整数之和
k的倍数的个位数找出来,然后判断一下是不是会大于num。
class Solution {
public:
int minimumNumbers(int num, int k) {
if(!num) return 0;
vector<int> a;
a.push_back(k);
int t = (k * 2) % 10;
while(t != k){
a.push_back(t);
t = (t + k) % 10;
}
int ret = -1;
for(int i = 0; i < a.size(); ++i){
if(a[i] == num % 10){
ret = i;
}
}
if((ret + 1) * k > num) return -1;
else if(ret == -1) return -1;
else return ret + 1;
}
};
Q3.小于等于 K 的最长二进制子序列
贪心,把0都加入,然后把1慢慢加。
class Solution {
public:
long long poww(int n){
long long ret = 1;
for(int i = 0; i < n; ++i){
ret *= 2;
if(ret > INT_MAX) return INT_MAX;
}
return ret;
}
int longestSubsequence(string s, int k) {
int n = s.size();
long long t = 0, ret = 0, lst = -1;
vector<int> a;
for(int i = n-1; i>=0; --i){
if(s[i] == '1'){
t += poww(n - 1 - i);
if(t <= k){
++ret;
a.push_back(i);
}
else break;
}
}
vector<int> b;
for(int i = 0; i < n; ++i){
if(s[i] =='0'){
++ret;
b.push_back(i);
}
}
return ret;
}
};
Q4.卖木块
直接dp即可。
class Solution {
public:
long long sellingWood(int m, int n, vector<vector<int>>& p) {
long long dp[m + 1][n + 1]; memset(dp, 0, sizeof(dp));
int h[m + 1][n + 1]; memset(h, 0, sizeof(h));
for(auto &i : p){
h[i[0]][i[1]] = max(h[i[0]][i[1]], i[2]);
}
for(int i = 1; i <= m; ++i){
for(int j = 1; j <= n; ++j){
dp[i][j] = h[i][j];
for(int k = 1; k <= i - 1; ++k) dp[i][j] = max(dp[i][j], dp[k][j] + dp[i - k][j]);
for(int k = 1; k <= j - 1; ++k) dp[i][j] = max(dp[i][j], dp[i][k] + dp[i][j - k]);
}
}
return dp[m][n];
}
};
浙公网安备 33010602011771号