计算应缴税款总额
模拟
class Solution {
public:
double calculateTax(vector<vector<int>>& brackets, int income) {
int last=0;
double res=0;
for(auto&x:brackets)
{
if(income>x[0])
{
res+=(x[0]-last)*(double)(x[1])/100;
last=x[0];
}
else
{
res+=(income-last)*(double)(x[1])/100;
break;
}
}
return res;
}
};
网格中的最小路径代价
动态规划
class Solution {
public:
int minPathCost(vector<vector<int>>& g, vector<vector<int>>& cost) {
int n = g.size(), m = g[0].size(), INF = 1e9;
vector<vector<int>> f(n, vector<int>(m, INF));
for (int i = 0; i < m; i ++ ) f[0][i] = g[0][i];
for (int i = 1; i < n; i ++ ) {
for (int j = 0; j < m; j ++ ) {
for (int k = 0; k < m; k ++ ) {
f[i][j] = min(f[i][j], f[i - 1][k] + cost[g[i - 1][k]][j] + g[i][j]);
}
}
}
int res = INF;
for (int i = 0; i < m; i ++ ) res = min(res, f[n - 1][i]);
return res;
}
};
公平分发饼干
回溯+剪枝
class Solution {
int ans = INT_MAX;
public:
int distributeCookies(vector<int>& cookies, int k) {
vector<int> num(k, 0);
dfs(cookies, num, k, 0);
return ans;
}
void dfs(vector<int>& cookies, vector<int>& num, int k, int i)
{
if(i == cookies.size())
{
ans = min(ans, *max_element(num.begin(), num.end()));
return;
}
for(int j = 0; j < k; ++j)
{
num[j] += cookies[i];
dfs(cookies, num, k, i+1);
num[j] -= cookies[i];
}
}
};
为公司取名
哈希表
using ll = long long;
class Solution {
public:
long long distinctNames(vector<string>& ideas) {
unordered_set<string> s(ideas.begin(), ideas.end());
vector<vector<ll>> cnt(26, vector<ll>(26));
for(string& is : ideas){
int pre = is[0] - 'a';
for(int i = 0; i < 26; ++i){
is[0] = (i + 'a');
if(!s.count(is)) cnt[pre][i]++;
}
}
ll ans = 0;
for(int i = 0; i < 26; ++i){
for(int j = 0; j < 26; ++j) ans += cnt[i][j] * cnt[j][i];
}
return ans;
}
};