随笔分类 - 训练--USACO
摘要:链接 分析:来看看背包九讲里面的一段话: 对于一个给定了背包容量、物品费用、物品间相互关系(分组、依赖等) 的背包问题,除了再给定每个物品的价值后求可得到的最大价值外,还可以得 到装满背包或将背包装至某一指定容量的方案总数。对于这类改变问法的问题,一般只需将状态转移方程中的max改成sum即可。例如
阅读全文
摘要:链接 分析:dp[i][j]表示前i个数,组成j,最少需要多少个。dp[i][j]=min(dp[i-1][j],dp[i-1][j-k*v[i]]+k),则可以转化为完全背包问题,同样的方法进行降维处理即可。 1 #include "iostream" 2 #include "cstdio" 3
阅读全文
摘要:链接 分析:裸的完全背包问题 1 #include "iostream" 2 #include "cstdio" 3 #include "cstring" 4 #include "string" 5 using namespace std; 6 const int maxn=1e5+100; 7 i
阅读全文
摘要:链接 分析:dp[i][j]表示前i个数能够组成j的对数,可得dp[i][j]=dp[i-1][j]+dp[i-1][j-i],所以最后dp[n][sum/2]既是所求 1 /* 2 PROB:subset 3 ID:wanghan 4 LANG:C++ 5 */ 6 #include "iostr
阅读全文
摘要:链接 分析:先打表需要用到的罗马数字,然后暴力转换,最后统计一下即可 1 /* 2 PROB:preface 3 ID:wanghan 4 LANG:C++ 5 */ 6 #include "iostream" 7 #include "cstdio" 8 #include "cstring" 9 #
阅读全文
摘要:链接 分析:码农模拟题,首先我们先求出对于0来说满足条件的数,然后在从集合当中筛选出任意两个都满足条件的数即可 1 /* 2 PROB:hamming 3 ID:wanghan 4 LANG:C++ 5 */ 6 #include "iostream" 7 #include "cstdio" 8 #
阅读全文
摘要:链接 分析:因为数据范围比较小,我们可以通过二进制枚举子集,然后找出所需饲料种数最小的并记录下来,同时记录一下路径,也就是字典序最小的 1 /* 2 PROB:holstein 3 ID:wanghan 4 LANG:C++ 5 */ 6 #include "iostream" 7 #include
阅读全文
摘要:链接 分析:首先我们先对其进行排序,并看排序以后有多少个元素顺序是对的,接着我们看有多少个元素经过一次交换可以得到的,最后剩下的元素就是经过两次交换可以得到的了。 1 /* 2 PROB:sort3 3 ID:wanghan 4 LANG:C++ 5 */ 6 #include "iostream"
阅读全文
摘要:链接 分析:遍历一下,求个gcd即可,最后按照ans排序并去重 1 /* 2 PROB:frac1 3 ID:wanghan 4 LANG:C++ 5 */ 6 #include "iostream" 7 #include "cstdio" 8 #include "cstring" 9 #inclu
阅读全文
摘要:链接 分析:先暴力求出联通块数和最大联通块包含多少,接着对于每个位置判断去掉其上下左右的四个位置的墙之后的最大联通块数,并且记得先选最西,然后选最南的顺序了来输出 1 /* 2 PROB:castle 3 ID:wanghan 4 LANG:C++ 5 */ 6 #include "iostream
阅读全文
摘要:链接 分析:满足题目条件的必然是1,2,3,5,7,9这几个数字的组合,DFS按位进行即可,边组合边判断是否合法。 1 /* 2 PROB:sprime 3 ID:wanghan 4 LANG:C++ 5 */ 6 #include "iostream" 7 #include "cstdio" 8
阅读全文
摘要:链接 分析:暴力枚举1-8位数,并判断是否为素数 1 /* 2 PROB:pprime 3 ID:wanghan 4 LANG:C++ 5 */ 6 #include "iostream" 7 #include "cstdio" 8 #include "cstring" 9 #include "st
阅读全文
摘要:链接 分析:数字三角形,经典题 1 /* 2 PROB:numtri 3 ID:wanghan 4 LANG:C++ 5 */ 6 #include "iostream" 7 #include "cstdio" 8 #include "cstring" 9 #include "string" 10
阅读全文
摘要:链接 分析:我们用vis[i][j][k]来记录A,B,C三个状态是否被访问过,同时用s[i]来记录C的所有可能值,当i==0时,如果j合法,则标记s[k]=1,最后统计所有为1的s即可 1 /* 2 PROB:milk3 3 ID:wanghan 4 LANG:C++ 5 */ 6 #includ
阅读全文
摘要:链接 分析:首先预处理数据集,然后将数据集排序,我们对于当前位置,去搜索是否存在满足条件的等差数列即可,之前一直TLE,完全是map的锅,太慢了 1 #include "iostream" 2 #include "cstdio" 3 #include "cstring" 4 #include "ma
阅读全文
摘要:链接 分析:读题!读题!读题!重要的事说三遍,中文翻译漏掉了一个重要的地方,每个只能用一次,调了一下午还以为标程错了,其实就是找一段长为17的区间,然后使所有都处于这个区间中代价最小,暴力枚举即可。 1 /* 2 PROB:skidesign 3 ID:wanghan 4 LANG:C++ 5 */
阅读全文
摘要:链接 分析:很有意思的一道题目,本菜调了一下午没有调出来,估计是判环过程出了问题,最后还是参照了官方题解。暴力去求解,首先预处理当前位置出洞以后将会进入的下一个位置,然后用回溯法去枚举每一对组合,在进行判环,这题收获还是很大。 1 /* 2 PROB:wormhole 3 ID:wanghan 4
阅读全文
摘要:链接 分析:在无限改之后终于过了,里面要处理的细节比较多,最后可以抽象成字符串,用set来去重 1 /* 2 PROB:combo 3 ID:wanghan 4 LANG:C++ 5 */ 6 #include "iostream" 7 #include "cstdio" 8 #include "c
阅读全文
摘要:链接 分析:对于三位数我们限定为[100,999],两位数我们限定为[10,99],然后我们依次判断是否满足乘法式且各个数位是否在数列中,若都满足+1 1 /* 2 PROB:crypt1 3 ID:wanghan 4 LANG:C++ 5 */ 6 #include "iostream" 7 #i
阅读全文
摘要:链接 分析:我们不断统计相邻两个元素之间的差值,按照差值从大到小排序,在进行贪心即可 1 /* 2 PROB:barn1 3 ID:wanghan 4 LANG:C++ 5 */ 6 #include "iostream" 7 #include "cstdio" 8 #include "cstrin
阅读全文

浙公网安备 33010602011771号