dfs枚举类型和剪枝
算法放苹果123456789101112// u表示枚举到哪个盘子,sum表示剩余几个苹果,last表示枚举了多少个。int dfs(int u, int sum, int last) { if(u == n) { if(!sum) return 1; return 0; } int res = 0; for(int i = last; i <= sum; i ++) res += dfs(u + 1, sum - i, i); return res;}
指数型枚举
用一个数组来表示三个状态,代替这个序列是升序。
123456789101112131415161718192021int n;int state[N];void dfs(int u) { if(u > n) { for(int i = 1; i <= n; i ++) if(state[i] == 1 ...
差分数组和贪心
算法错字
平衡括号字符串:最简单的定义为字符串所包含的 ( 和 ) 数量必须相同,并且对于字符串的任意前缀,所包含的 ( 的数目都不少于 ) 的数目。(准确来说是左括号严格等于右括号)
题目意思理解准确:①任意前缀。②可能是(多于),也有可能是)多于(,(等于)时,一定是满足平衡括号字符串。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#include<iostream>#include<algorithm>#include<cstring>using namespace std;string s;int main() { cin >> s; int l = 0, r = 0; for(auto c : s) { if(c == '(') l ++; else r ++; } ...
synchronized与lock
javasynchronized 与Lock
ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,比较常用的是ReentrantLock,可以显示加锁、释放锁。
线程创建总结1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950package test;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.Future;import java.util.concurrent.FutureTask;public class ThreadSum { public static void main(String[] args) { new MyThread1().start(); ...
字符串反转函数和死锁
算法字符串翻转函数
strrev()函数用于char字符串数组,reverse()函数用于string类型的字符串。
123456789101112131415161718192021222324252627282930#include <iostream> #include <cstring> using namespace std; int main() { char s[]="hello"; strrev(s); cout<<s<<endl; return 0; } #include <iostream> #include <string> #include <algorithm> using namespace std; int main() { string s = "hello"; reverse(s.begin() ...



