摘要: 状态表示:$f(i,j):$从前$i$个物品中选,总体积不超过$j$的情况下的最大价值 (蓝书上定义的是总体积为$j$的最大价值,初始化时要作出相应的修改) 状态转移: 选第$i$个物品:\(f(i,j)=f(i-1,j-v_i)+w_i\) 不选第$i$个物品:\(f(i,j)=f(i-1,j)\ 阅读全文
posted @ 2020-09-19 17:17 Dazzling! 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 我的思路(还是想了些许时间的): 按照题目的闭合圈的规定: 闭合圈由数字1构成 围圈时只走上下左右4个方向 方阵内只有一个闭合圈,圈内至少有一个0 可知从上到下, 从左到右遍历到第一个为1的格子的右下角必定为圈内的0,然后就是bfs填充连通块了 const int N=35; int g[N][N] 阅读全文
posted @ 2020-09-19 14:49 Dazzling! 阅读(137) 评论(0) 推荐(0) 编辑
摘要: flood-fill const int N=110; char g[N][N]; int n,m; int res; inline bool check(int x,int y) { return x>=0 && x<n && y>=0 && y<m; } void bfs(int x,int y 阅读全文
posted @ 2020-09-19 11:29 Dazzling! 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 水题,组合型枚举 const int N=10; int path[N]; int n; void dfs(int u,int sum,int last) { if(sum > n) return; if(sum == n) { for(int i=0;i<u;i++) if(i) cout<<"+ 阅读全文
posted @ 2020-09-19 09:40 Dazzling! 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 无脑暴搜 const int N=110; char g[N][N]; bool vis[N][N]; int n; string str="yizhong"; bool check(int x,int y) { return x>=0 && x<n && y>=0 && y<n; } void d 阅读全文
posted @ 2020-09-19 09:31 Dazzling! 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 这题wa了有点久。。。对bfs理解更深刻了(bfs第一次扩展到即为最短距离)。 大体上和bfs模板差不多,只是增加了传送门,且题意规定一旦到达传送门立即传送。 只需要将当前扩展的结点变为传送到的结点即可,在判断dist数组是否为-1 dist数组即标记数组vis,第一次更新时即为最短。 const 阅读全文
posted @ 2020-09-18 19:31 Dazzling! 阅读(213) 评论(0) 推荐(0) 编辑
摘要: bfs裸题,输出sb const int N=410; int dist[N][N]; PII st; int n,m; bool check(int x,int y) { return x>=1 && x<=n && y>=1 && y<=m; } void bfs(int x,int y) { 阅读全文
posted @ 2020-09-17 20:44 Dazzling! 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 暴搜,回溯 const int N=10; bool g[N][N]; int ans; PII st,ed; int n,m,k; inline bool check(int x,int y) { return x>=1 && x<=n && y>0 && y<=m; } void dfs(int 阅读全文
posted @ 2020-09-17 20:31 Dazzling! 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 数据范围10,巨小,直接dfs枚举。 指数型枚举,注意至少要选一个物品。 const int N=15; PII a[N]; int ans=INF; int n; void dfs(int u,int muls,int sumb) { if(u == n) { if(muls == 1 && su 阅读全文
posted @ 2020-09-17 19:22 Dazzling! 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 组合型枚举,注意选满k个而不是n个即可回溯 const int N=25; int a[N]; int n,k; int ans; bool check(int x) { if(x < 2) return false; for(int i=2;i*i<=x;i++) if(x % i == 0) r 阅读全文
posted @ 2020-09-17 19:08 Dazzling! 阅读(102) 评论(0) 推荐(0) 编辑