题目总结:这种数论动规的关键点是在“与上届相等的数的处理”上,只要这个弄懂了,这种题应该就都会做了。因为和上届相等的数最多只有一个,所以我用一个equal来记录是否有满足条件的上届。而其他小于上届的数用f数组储存。策略只有取1和取0。小于上届的数可以随便取。equal的状态转移要好好想想:当前位为1...
分类:
其他好文 时间:
2014-08-13 21:48:38
阅读次数:
323
题目大意:
简单的塔防游戏,有三种塔。
一种是减速塔,只能减速它身后的敌人,使之移动速度减慢。通过一格的时间变成加z秒。
两种攻击塔,一种只能打面前,另外一种可以打身后。
思路分析:
我们默认把只能攻击面前的塔放到最后面。
状态方程: dp [i] [j] 表示放到第 i 个位置放了 j 个防御塔能达到的最大伤害。
转移方程:dp [i] [j] =max ( dp...
分类:
其他好文 时间:
2014-08-13 15:00:26
阅读次数:
143
很裸的dp
状态转移方程 dp[i]=max(dp[i-1],dp[i-2]+dp[i]*i)
#include
using namespace std;
long long dp[100020];
int main()
{
int n,a;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d...
分类:
其他好文 时间:
2014-08-13 10:36:25
阅读次数:
195
一、基本概念
动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。
动态规划是运筹学中用于求解决策过程中的最优化数学方法。当然,我们在这里关注的是作为一种算法设计技术,作为一种使用多阶段决策过程最优的通用方法。它是应用数学中用于解决某类最优化问题的重要工具。
如果问题是由交叠的子问题所...
分类:
其他好文 时间:
2014-08-13 03:36:25
阅读次数:
385
在软件设计中经常会遇到这样的对象转移的条件表达式过于复杂的情况,这时可以采用if else或者switch case等语句进行处理,但是这样做的弊端就在于每增加一次状态,都需要对以前的代码进行修改,这不符合面向对象的开闭原则。此时更好的方法就是将状态的判断逻辑转移到表示不同状态的一系列类中,这就是今天要介绍的状态模式。
状态模式的定义,允许一个对象在其内部状态改变时改变它的行为。
状态模式的U...
分类:
其他好文 时间:
2014-08-13 01:18:25
阅读次数:
206
题目:Walking on a Grid
题目大意:给出N * N的矩阵,每个格子里都有一个值,现在要求从(1,1)走到(n, n),只能往下,左,右这三个方向走,并且要求最多只能取k个负数,求这样的要求下能得到的走过格子的值之和最大。
解题思路:记忆化搜索,但是这里要四维的,因为要记录方向,为了防止走回头的路,并且取了几个负数也要记录。然后就是dfs了。状态转移方程:dp【x...
分类:
其他好文 时间:
2014-08-13 01:16:55
阅读次数:
222
题目:10465 - Homer Simpson(完全背包)
题目大意:有个家伙很喜欢吃burger,现在有两种burger,然后给出吃这两种burger的时间,然后问你在指定的时间内,他能吃最多的burger的个数是多少。如果不能够用完的话,那么剩余时间就拿来喝水,要求喝水的时间尽量短。
解题思路:完全背包。状态转移方程:dp【t】在t时间内能吃的最多的burger数目。dp...
分类:
其他好文 时间:
2014-08-13 01:15:54
阅读次数:
154
一些 IL 语言解释:跳转指令集合Public field Static Beq 如果两个值相等,则将控制转移到目标指令。Public field Static Beq_S 如果两个值相等,则将控制转移到目标指令(短格式)。Public field Static Bge 如果第一个值大于或等于第二个...
分类:
其他好文 时间:
2014-08-13 00:46:34
阅读次数:
270
问题背景[cpp]view plaincopy#includeusingnamespacestd;vectordoubleValues(constvector&v){vectornew_values(v.size());for(autoitr=new_values.begin(),end_itr=n...
分类:
编程语言 时间:
2014-08-13 00:45:54
阅读次数:
266
此题开始 用记忆化搜索搞,我果然白痴,字符串30w 的长度 ,爆栈是肯定的。dp转移的方程: str[i->j] 如果出现 dp[i] += dp[j+1]然后用字典树查询 str[i->j]是否出现过。#include #include #include #include #include #in...
分类:
其他好文 时间:
2014-08-12 16:15:54
阅读次数:
198