906 AlvinZH的奇幻猜想----整数乘积 思路 难题.动态规划. 将数字串按字符串输入,处理起来更方便些. dp[i][j]:表示str[0~i]中插入j个乘号时的乘积最大值.状态转移方程为:dp[i][j] = max(dp[i][j], dp[i-k][j-1]*convert(i-k+1,i)),k∈[1,i-j+1],convert为数字转换函数.具体见参考代码一. 思想相同,另一份代码可能也比较好理解,见参考代码二.请思考各重循环的含义. 注意:本题要在long long范围内…
914 AlvinZH的奇幻猜想----整数乘积puls 思路 难题.动态规划. 将数字串按字符串输入,处理起来更方便些. dp[i][j]:表示str[0~i]中插入j个乘号时的乘积最大值.状态转移方程为:dp[i][j] = max(dp[i][j], dp[i-k][j-1]*convert(i-k+1,i)),k∈[1,i-j+1],convert为数字转换函数. 注意:本题在上一题的基础上,数字串变得很长,long long根本处理不了. 方法:大数乘法.定义大数结构体,用数组存下每一…
本文由AlvinZH所写,欢迎学习引用,如有错误或更优化方法,欢迎讨论,联系方式QQ:1329284394. 前言 动态规划(Dynamic Programming),是一个神奇的东西.DP只能意会,不可言传.大家在做DP题的时候一定要理清思路,一般是先不管空间,毕竟以空间换时间,大多数题都是先卡时间再卡空间的. DP具备的两个要素:最优子结构和子问题重叠,见<算法导论>225页.简单来讲就是问题是一个由多决策产生最优值的最优化问题. 最优化原理:其子问题的最优会导致全局最优,具有最优子结构的…
977 AlvinZH过生日 思路 难题.逆推DP. 要明确dp的状态只与是否有选择权有关,而与选择权在谁手里无关.因为不论选择权在谁手里,那个人都会尽可能的获得最大的蛋糕重量. dp[i]表示分配到第i个物品为止,当前拥有选择权的人能获得的最大蛋糕重量,即蛋糕[i~n]的最大值.以有选择权的的人列一个转移方程,然而因为我们只知道初始选择的是AlvinZH,因此我们要逆推: dp[i] = max(dp[i+1], sum - dp[i+1] + val[i]);//max(不吃, 吃) 其中s…
976 AlvinZH想回家 思路 如果在第i小时有一些飞机延误,那么一架飞机的c值越大,这一小时产生的损失也越大.而使这一小时产生的损失尽可能的小并不会导致接下来时间产生的损失增大.因此应当每一小时都找出要飞的飞机中c值最大的飞走,即贪心思想. 题目有要求,第k+i小时,应该从1~k+i架航班中未飞出的航班中选出ci最大的飞走. 由于需要将找出数据中的最大值.去掉数据中最大值,可以考虑使用优先队列. 贪心证明: 设序号为i的飞机起飞时间为di,则cost=∑(di-i)_ci=∑di_ci-∑…
963 AlvinZH打怪刷经验 思路 这不是一道普通的01背包题.大家仔细观察数据的范围,可以发现如果按常理来的话,背包容量特别大,你也会TLE. 方法一:考虑01背包的一个常数优化----作用甚微.考虑到V很大时,由于只需要dp[V]的值,倒推前一个物品,只要知道dp[V-Wn]即可.以此类推,对以第j个背包,其实只需要知道到dp[V-sum{w[j..n]}]即可.这是DP无后效性的理解. 什么是01背包常数优化? 这种方法可以卡着时间点过这题,具体参考参考代码一. 方法二:动态规划需要变…
851 AlvinZH的鬼畜密码 思路 难题.动态规划. 先判断字符串是否合理(可翻译),然后分段处理,每一小段用动态规划求出解法数. dp[i]:字符串str[0~i]的解法数.通过判断str[i],不同情况下dp[i]求解情况不同. 在参考代码一中,助教使用了思路比较好理解的方法,同学们可以借助注释来理解. 其实不用这么复杂,划分啥的.直接整个一起dp就好.可能会有些不太好理解,具体参考参考代码二. 二者方法相同,效率也相同. 分析 坑一:解法数为0判别:①首字符为'0':②不为"10&qu…
905 AlvinZH的奇幻猜想--三次方 思路 中等题.题意简单,题目说得简单,把一个数分成多个立方数的和,问最小立方数个数. 脑子转得快的马上想到贪心,从最近的三次方数往下减,反正有1^3在最后撑着保证减完.不好意思这是错的,因为1,27,64,125...等立方数之间并不是倍数关系,不能构成贪心策略.举个反例:96=64+8+8+8+8=64+27+1+1+1+1+1,答案明显是5,而贪心会算到7. 既然不是贪心,那就是DP了,没毛病.先讲一下常规做法吧,是这样想的:相当于把一个数化成几份…
题目: 给出1个正整数,找到用与这个数字相同的digit组成的整数中比这个数字大的数集中的最小数字.比如:12352874 的结果是 12354278 分析: 这道题目的考虑目标是数组的查找与排序. 当然, 前提是你得明白这道题目的思路是什么样子的. 把正整数转化为char数组a, 长度为n, 末尾字符是a[n-1], 然后对该数组逆序查找, 会发现, 第一个a[n-1]比小的字符是a[i], 然后字符a[i]跟a[n-1]交换, 最后对数组中i到n-1的部分进行升级排序, 你会发现, 正是最后…
Ural1158 看上去很困难的一道题. 原文地址 http://blog.csdn.net/prolightsfxjh/article/details/54729646 题意:给出n个不同的字符,用这n个字符构成长度为m的字符串,要求每个串的子串都不出现给定的p个串中的任一个,求满足要求的字符串的个数.   AC自动机+dp 因为构成的最终串是由一个字符一个字符添加到字符串尾部构成的,那么如果一个串的后缀如果恰好是某个给定串的前缀时,这个串就可能最终成为非法串. 用k个给定串建立AC自动机,然…