摘要: 快速幂模板 #include<iostream> #include<cstdio> #define MOD 100007 #define ll long long using namespace std; inline int read(){ int s=0,w=1; char ch=getchar 阅读全文
posted @ 2021-08-03 10:35 ICtiger 阅读(22) 评论(0) 推荐(0)
摘要: 1-《算法导论》 阅读全文
posted @ 2021-07-29 10:23 ICtiger 阅读(69) 评论(0) 推荐(0)
摘要: \(Kruskal\) $Kruskal$算法将一个连通块当做一个集合。 $Kruskal$首先将所有的边按从小到大顺序排列(一般使用快排),并认为每一个点都是孤立的,分属于$n$个独立的集合。 然后按顺序从小到大枚举每一条边。如果这条边连接这两个不同集合,那么就把这条边加入最小生成树,这两个集合就 阅读全文
posted @ 2021-07-29 10:22 ICtiger 阅读(125) 评论(0) 推荐(0)
摘要: 问题模型: 对于给定了背包容量,物品费用,物品间的相互关系的背包问题,除了在给定的价值后求得的最大价值外,还可以得到装满背包或将背包装到指定容量的最小物品数量。 对于这类问题,一般只需要将动态转移方程的max改为min即可 定义: f[i][j]表示将前i件物品恰填满容量为j的背包最少需要的物品数 阅读全文
posted @ 2021-07-23 10:17 ICtiger 阅读(392) 评论(0) 推荐(0)
摘要: 对于给定了背包容量,物品费用,物品间的相互关系(分组,依赖)等 的背包问题,除了给定每个物品的价值后求得的最大价值外,还可以得到装满背包或将背包装置某一指定容量的方案总数 对于这类问题,一般只需要将状态转移方程中的max改成sum即可 如果$j<=V_i$ 则第i件物品一件也放不进去,\(f_{[i 阅读全文
posted @ 2021-07-22 10:16 ICtiger 阅读(199) 评论(0) 推荐(0)
摘要: 多重背包 问题模型 给定n个物品,其中第i个物品的体积为$V_i$,价值为$W_i$,并且有$C_i$个,有一容积为M的背包将物品放入背包,使得最后的体积最大。 方法一: for i=1 to n for j=0 to m for k=0 to min(c[i],j/v[i]) f[i][j]=ma 阅读全文
posted @ 2021-07-21 10:14 ICtiger 阅读(60) 评论(1) 推荐(0)
摘要: 问题模型 给定n个物品,其中第i个物品的体积为$V_i$,价值为$W_i$,并且有无数个,有一容积为M的背包将物品放入背包,使得最后的体积最大。 方法一: for(int i=1;i<=n;i++){ for(int j=0;j<=m;j++){ for(int k=0;k<=j/v[i];k++) 阅读全文
posted @ 2021-07-20 10:15 ICtiger 阅读(107) 评论(0) 推荐(0)
摘要: 状态:\(f[i][j]\),将前i件物品放入容量为$j$的背包能获得的最大价值 边界:\(f[0][j]=0\),将前0件物品放入容量为j的背包,能获得最大的价值 动态转移方程:\(f_{i,j}=max(f_{i-1,j-v[i]+w[i]},f_{i-1,j})\) 目标:f[n][m] 图表 阅读全文
posted @ 2021-07-19 11:01 ICtiger 阅读(112) 评论(0) 推荐(0)
摘要: 1.找到白点中$d$值最小的点,并把该白点标位蓝点 2.更新与该蓝点相邻的其他点的$d$值 /* Coder Setting sail and crossing the sea, Can always going through the waves by wind. */ #include<iost 阅读全文
posted @ 2021-06-05 10:28 ICtiger 阅读(38) 评论(0) 推荐(0)
摘要: d[i][j]表示从点i到点j之间的最短路径 d[i][j]=min(d[i][k]+d[k][j],d[i][j]); d[i][j]=G[i][j],如果不联通是正无穷 for(int i=1;i<=k;i++){ //中转点 //d[i][j]以前k-1个点作为中转点的最短路径 for(int 阅读全文
posted @ 2021-05-29 10:37 ICtiger 阅读(610) 评论(0) 推荐(0)