摘要:
创建一个哈希表,对于每一个 \(nums[i]\),我们首先查询哈希表中是否存在 \(target - nums[i]\),然后将 \(nums[i]\) 插入到哈希表中,即可保证不会让 \(nums[i]\) 和自己匹配。 class Solution { public: vector<int> 阅读全文
摘要:
对满足条件的发票做一遍$01$背包即可。 const int N = 3e6 + 10; int f[N]; int n; double m; void update(int v) { for(int j = m; j >= v; j--) f[j] = max(f[j], f[j - v] + v 阅读全文
摘要:
状态表示: \(f(i,j)\):$i$的$j$划分总数。 状态转移: 考虑$n$的$m$划分$a_i(\sum_^ma_i=n$): 如果对于每个$i$都有$a_i > 0$,那么${a_i-1}$就对应了$n-m$的$m$划分。 如果存在$a_i=0$,这就对应了$n$的$m-1$划分。 \[ 阅读全文
摘要:
借助前缀和,将二维的最大子矩阵转化为一维的最大子段和问题。 需要枚举最大子矩阵的首行和末行,内层循环每次都要求一遍最大子段和,时间复杂度为:\(O(n^3)\) const int N = 110; int a[N][N]; int f[N][N]; int n; int main() { whil 阅读全文
摘要:
将棋盘编码成字符串,然后利用哈希表判重+记录距离。 char g[2][4]; unordered_map<string, int> dist; unordered_map<string, string> path; string st,ed; void put(string s) { for(in 阅读全文
摘要:
在 DHCP 启动时,首先初始化 IP 地址池,将所有地址设置状态为未分配,占用者为空,并清零过期时刻。 其中地址的状态有未分配、待分配、占用、过期四种。 处于未分配状态的 IP 地址没有占用者,而其余三种状态的 IP 地址均有一名占用者。 处于待分配和占用状态的 IP 地址拥有一个大于零的过期时刻 阅读全文
摘要:
二维前缀和。 const int N = 610; int g[N][N], sum[N][N]; int n,l,r,t; int main() { cin >> n >> l >> r >> t; for(int i = 1; i <= n; i++) for(int j = 1; j <= n 阅读全文
摘要:
开个桶记录出现次数。 const int N = 260; int cnt[N]; int n,m,l; int main() { cin >> n >> m >> l; for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) { int x; c 阅读全文
摘要:
枚举。每种饲料的份数取值为$0 \sim 100$,时间复杂度为$O(101^3)$。 int g[3]; int a[3][3]; int main() { for(int i = 0; i < 3; i++) cin >> g[i]; if(g[0] + g[1] + g[2] == 0) pu 阅读全文
摘要:
数字后面的0可以被10整除,或者等于2和5整除。此外,在一个阶乘中总是质因子2的个数多于5的个数。 为了得到阶乘的最后一位数,我们可以运行一个循环来计算阶乘模10的结果,但要出去质因子2或5。 最后,排除相同数量的2和5,从而忽略10,并乘以多余数目的质因子2。 int n; int main() 阅读全文