USACO 3.1 分析

题目一: Agri-Net

算法:MST

方法1:kruskal

要用到并查集的方法

1.把边从小到大排序;

2.初始化:每个点自成一棵树,形成森林;

3.按边权值从小到大枚举,找到不在一棵树中的两个点,将这两棵树合并,累计权值;

小细节:记录下需要计算的代表元的结果;

 

方法二:PRIM

 

题目二:Score inflation

算法:无限背包

 

题目三:Humble Numbers

题目描述:给定若干质因子,求出由这些质因子所能构成的所有整数中的第K大数是多少

算法:动态规划

1.最初的想法是用D[I]表示以第i个质数结尾当前以产生的最大质数,但是错的,会漏掉一些数;

2.后来看了MAIGO的代码,自己琢磨了两天明白了他的方法,用D[I]表示第i个质数当前用来产生新数的数在产生的数串中的位置,这样肯定不会漏;

 

题目四:Shaping Regions

题目大意:依次给定N个有色矩形,覆盖,求最后的图形中各种可见颜色的面积

算法:搜索

1.最开始的想法是从后往前枚举,然后与后面的图形进行切割,但是具体怎么切割不清楚;

2.看了MAIGO的代码,体会了一下,明白了;

3.与后面的切割时,先去处理X两边多出来的部分,重点是要更新X,然后在处理Y两边

 

 

题目五:Contact

题目大意:给定01串,求出长度为A-B之间各个01串的数量最多的前K组

算法:枚举+位处理

1.基本思路很清晰,一次枚举位,然后对新形成的串进行分类,但关键是怎么保存这个串以及怎么更新这个串;

数据结构:

01便想到位运算,把2进制转化为10进制,长度为L的01串前加个1便可区分不同长度的相同数值的01串;

更新:

   1.先去掉开头的1;  2.增加当前位的值;  3.把开头的数值用|运算强制转成1

对应的位运算分别为
s[j] &= (1 << L)-1

s[j] = (s[j] << 1) + ss[i] -'0';

s[j] |= (1 << j);

2.接下来的问题是输出格式的控制,建议先把所有有的串排个序,在分个类,出现相同数目的01串有几个,然后输出,容易控制;

 

 

题目六:Stamps

题目大意:有若干种基础面值的邮票,每种数量无限,求最多用K张邮票不能拼出的最小数是多少

算法:BFS

1.在基础面值确定的条件下,每一张面值所需最少邮票数是这个面值的固有属性;
2.一开始想用DP,但方程找不出来,后来想到用BFS的向后拓展的功能可以实现,基于1,每个点最多被加入一次队列,空间用4B-INT型需要15M,所以改用4B-INT+2B-SHORT需11.5M,实际用了14M

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值