摘要:
首先,为了使得 \(\textit{nums}\) 中所有元素相等,我们需要将 \(\textit{nums}\) 中的任意元素都变为 \(\textit{nums}\) 中的最小值。 其次,考虑 \(\textit{nums}\) 中的任意元素 \(x\),每次操作(如有)只能将它变成严格小于它的 阅读全文
摘要:
模拟矩阵旋转$90°$,老套路题了。 class Solution { public: int n; void rotate(vector<vector<int>> &mat) { vector<vector<int>> temp(n,vector<int>(n)); for(int i=0;i<n 阅读全文
摘要:
完全背包求方案数。 求体积恰好为$n$、每种物品可选任意件的背包方案数。 const int N=30,M=10010; LL f[M]; int n,m; int main() { cin>>n>>m; f[0]=1; for(int i=1;i<=n;i++) { int v; cin>>v; 阅读全文
摘要:
状态表示: \(f(i,j)\):节点数为$i$,高度不超过$j$的子树个数(定义成高度恰好为$j$不好计算)。 状态转移: 若左子树的节点数为$k$,则右子树的节点数为$i-k-1$。 \[ f(i,j)=\sum_{k=1}^{i-2} f(k,j-1) \times f(i-k-1,j-1) 阅读全文
摘要:
3626. 三元一次方程 签到。 暴力思路是三重枚举,可优化至两重枚举。 int n; int main() { int T; cin>>T; while(T--) { cin>>n; bool ok=false; for(int i=0;3*i<=n && !ok;i++) for(int j=0 阅读全文
摘要:
枚举每次选择的三种运算符:\(\{'\ \ ','+','-'\}\)(字典序),时间复杂度为$O(3^),n \le 9$。 注意点 在数字$1$前加一个$'+'$方便表达式求值。 char path[10]; char op[]={' ','+','-'}; int n; bool check( 阅读全文
摘要:
状态表示: \(f(i)\):前缀$s[1 \sim i]$能否由子串集合中的元素表示。 $f(i)$只有$true$和$false$两种取值。 状态转移: 对每个子串$p[i]$,若$s[i]$大小为$p[i]$长度的后缀与$p[i]$匹配,则有如下转移: \[ f(i) \ |= f(i-p[i 阅读全文
摘要:
同12. 整数转罗马数字 pair<int,string> mp[]={ {1000, "M"}, {900, "CM"}, {500, "D"}, {400, "CD"}, {100, "C"}, {90, "XC"}, {50, "L"}, {40, "XL"}, {10, "X"}, {9, 阅读全文
摘要:
罗马数字由 7 个不同的单字母符号组成,每个符号对应一个具体的数值。此外,减法规则(如问题描述中所述)给出了额外的 6 个复合符号。这给了我们总共 13 个独特的符号(每个符号由 1 个或 2 个字母组成),如下图所示。 我们用来确定罗马数字的规则是:对于罗马数字从左到右的每一位,选择尽可能大的符号 阅读全文
摘要:
双指针维护长度为$k$的区间内未选的数的和的最大值,之后再加上可选的数即可。 const int N=1e5+10; PII a[N]; int n,k; int main() { cin>>n>>k; for(int i=0;i<n;i++) cin>>a[i].fi; for(int i=0;i 阅读全文