题意:n个作业,每个作业有deadline和做完这个作业需要花的时间cost,完成作业每超过一天就减一分,求减去的最小的分数
分析:作业的全排列中取最优解,但是15!太大了会超时,所以用二进制来状态压缩,15个二进制位,第i位的0/1代表第i个作业是否完成。
1.会用状态压缩
2.保存和输出最优解序列方法
慢慢加深理解吧
代码:
#include
#include
#include
#...
分类:
其他好文 时间:
2015-06-07 09:36:10
阅读次数:
101
动态规划是我学的最蛋 疼的一个问题。大家觉得呢?动态规划算法的一般步骤1.找出最优解的性质,并刻画其结构特征;2.递归地定义最优值;3.以自底向上的方式计算出最优值;根据计算最优值时得到的信息,构造最优解下面用一个例子来说明。矩阵连乘问题(自行百度查一下是什么哈)?将矩阵连乘积AiAi+1…Aj记作...
分类:
其他好文 时间:
2015-06-07 09:29:37
阅读次数:
92
动态规划的基本思想:将一个问题分解为子问题递归求解,且将中间结果保存以避免反复计算。通经常使用来求最优解,且最优解的局部也是最优的。求解过程产生多个决策序列,下一步总是依赖上一步的结果。自底向上的求解。动态规划算法可分解成从先到后的4个步骤:1. 描写叙述一个最优解的结构,寻找子问题。对问题进行划分...
分类:
其他好文 时间:
2015-06-06 13:31:37
阅读次数:
112
贪心算法和动态规划一样,都适用于求解最优化问题。贪心算法不是对所有问题都能得到整体最优解,可用贪心算法求解的问题需要具有贪心选择性质和最优子结构性质。 一. 基本思想 贪心算法总是作出在当前看来是最好的选择(即贪心选择)。也就是说贪心算法并不从整体最优上加以考虑,它所作出的选择只是在某种意义上的局部...
分类:
编程语言 时间:
2015-06-06 13:25:53
阅读次数:
160
题意:
给出一个长度为n的序列和m次操作;
每次操作选择一个地方将序列分开,得分为左一半的和乘右一半;
求最大的总得分;
题解:
首先显然分割的顺序与得分无关,只要在那几个地方割就可以是最优解;
(为什么?难道要我@PoPoQQQ来证明一下?)
然后可以设状态为f[i][j],表示在前j个数里选择i个点分割的最大得分;
那么转移式显然为f[i][j]=max...
分类:
其他好文 时间:
2015-06-06 09:16:18
阅读次数:
145
本节的目的是记录以下学习和掌握模拟退火(Simulated Annealing,简称SA算法)过程。模拟退火算法是一种通用概率算法,用来在一个大的搜寻空间内寻找命题的最优解。这里分别使用随机模拟退火算法和确定性模拟退火算法,在MATLAB平台上进行编程,以寻找一个6-单元全连接网络的能量最小化模型。...
分类:
编程语言 时间:
2015-06-05 06:24:51
阅读次数:
331
题意:小明有n元钱,他想申请国外的学校,申请第i所学校要用si的费用,申请成功的概率是pi,求小明至少能申请成功一所学校的概率。
分析:概率当然是从反面求最小值。状态转移方程:dp[i]=min(dp[j]*p[i],dp[i]),我想错了,我就按照以前的dp的套路依照数组来遍历,还先排了序,dp[i]代表申请第i所学校时的最优解;正确的应该是从费用出发,dp[i]表示用了i元钱时的最优解,这才...
分类:
其他好文 时间:
2015-05-29 00:57:39
阅读次数:
153
题目传送门 1 /* 2 暴力:每次更新该行的num[],然后暴力找出最优解就可以了:) 3 */ 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 11 const in...
分类:
其他好文 时间:
2015-05-27 20:52:48
阅读次数:
155
对于单个单位的寻路可以使用A*算法。但是在实际应用中往往出现多个单位同时移动的场面,而且它们会互相影响,阻碍对方的移动。所以一旦冲突,之前为每个单位计算出的路径就会失效。一种流行的解决方法是发现冲突的时候重新计算路径。还有定期重新计算的等等。这些都是动态调整的方案,最后形成的路径并非是最优的。虽然这...
分类:
编程语言 时间:
2015-05-27 18:44:55
阅读次数:
1024
贪心算法的思想就是用局部的最优解,达到最后全局的最优解。贪心算法使用是有限制的,一个问题能不能使用贪心来做,往往我们要对其进行必要的证明。贪心算法策略具有无后向性,也就是当前阶段的状态确定之后,不受后面阶段状态的影响。
现在我们先将一个能使用贪心算法的问题——数列极差。
问题描述:在黑板上写了N个正整数作成的一个数列,进行如下操作:每一次擦去其中的两个数a和b,然后在数列中加入一个数a*b+1...
分类:
编程语言 时间:
2015-05-27 17:20:38
阅读次数:
356