阿里巴巴杯与武大第六届中部地区邀请赛的其中几题

         hust1446单机任务调度。对于每一个任务,都有一个完成时间和提交时间。现在每个时刻只能运行一个任务,但可以同时提交多个任务,问将完成所有任务并提交所需的最少时间是多少?

      因为所有任务的总完成时间是一定的,所以我们尽量减少在完成时间外的提交时间就可以了。因为每个时刻可以提交多个任务,所以我们只需要把提交时间多的任务先做就可以了。。。

 

      hust1440寻找ACM。这跟喵呜出的校赛的题目几乎是一样,求只包含A,C,M字符的字符串中共有多少个ACM方案,只要有一个位置不相同就算不同的ACM方案。

      扫描每一个C的位置,只要把它前面A的个数乘以它后面的M的个数,所得数的和就是结果。对于前面A的个数,扫描的过程中可以标记,它后面M的个数可以先扫描整个求出总的M的个数,然后减去前面M的个数就可以了。

 

      hust1445求(1,1)到(n,m)的方法数?结论很简单,就是C(m+n)(m)然后它保证了结果在32位范围内,所以可以乘一项除一项。

     定义long long类型的数据,用%I64d接收,竟然会TLE。

 

 

 

     hdu3809根据x1=x-sqrt(y)和y1=y-sqrt(x)两个等式,输入0<=x1,y1<=10000,求x,y.

     将第一项消去x代入第二项中得到y1=y-sqrt(x1+sqrt(y))。因为x1,y1>=0,可以证明:x,y>=1,所以上式右边关于y单调递增。二分y值即可.(注意若通过第一个等式消去y代入第二个所得的等式不满足单调性)

 

     hdu3810magina 现在给你一个无向图,每个点都有怪兽,你可以选择消灭或不消灭它。消灭这个点的怪兽需要花费一定的时间,同时消灭后会得到一定的钱。相连的点表示能瞬间到达。现在可以以任意一点为起始点,问最少花多少时间会得到不小于M的钱。

     先求每个连通分量(因为是无向图,所以只要搜索就行),若这个连通分量的钱和不小于M,则搜索求出这个连通分量的得到的钱小于M,所花的最少时间。搜索时注意剪枝。。。

 

     hdu3811 permutation N个数的全排列的方法数为N!,现在给出一定的限制条件,如第三个数字必须是4等等。然后问至少有一个限制条件成立的方法数(n<17).

     通过这数据可想到二进制DP,但不知为何,比赛时没想出来。dp[i][j]表示前i位出现数字对应的二进制和为j的方法数,如2 3 4是dp[3][14]的一种情况。那么我们可以枚举第i位的数字,if(j&(1<<k)) dp[i][j]+=dp[i-1][j-(1<<k)];

     其实上面表示的状态第一维是浪费的,因为根据扫描j中二进制1的位数就可以知道i的值,所以第一维可以不要。另一种方法:如果用dp[j][2]表示状态,其中dp[j][0]表示前面二进制和为j中不含一个限制条件的方法数,dp[j][1]表示前面二进制和为j中至少含有一个限制条件的方法数。那么状态转移方程为if(j&(1<<k)) dp[j][1]+=dp[j-(1<<k)][1],dp[j][?]+=dp[j-(1<<k)][0](其中?取决于j的二进制1的个数和k的关系是不是存在限制条件).

 

 

      hdu3812 Sea Sky某人能通过某一个单词想到另一个单词,但不能重复利用同一个关系,现从Sea开始,想从Sky结束,问最长的单词集合的单词(个数相同,输出字典序小的)?(单词总数目不会超过16)。

      这也是一个二进制DP,用0,1分别表示单词是否用过。。。关键在于字典序,解决这样问题的常用方法是三次DP,第一次求最优解,第二次逆序只保存在最优解路上的所有点,第三次正序扫描输出.而这个问题可以更简单一点,首先把所有状态[state][last]的最优解求出来.接着比较每个状态的字典序关系,对于(state1, last1) 和 (state2, last2),先看两个状态下的DP值,然后根据转移关系回溯判断字典序,由于字典序是要正向保证的,所以这个回溯也要是正向的,因此只要第一遍DP是逆向的,在其中记录转移关系就好了。找到了字典序最小的状态,输出就不是问题了。

      最后附上isea关于武大校赛的解题报告http://hi.baidu.com/%D2%BB%CE%BB%C1%E3/blog/item/62099eeb843677c4d439c9a9.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值