摘要:状态:dp[i][j]表示第i天到达j号城市的最小花费状态转移:dp[i][j] = min(dp[i-1][k]);注意边界是dp[0][1] = 0,而不是dp[1][1] = 0;代码如下:#include #include #define N 15
#define K 1005
#define INF 0x7fffffff
int n, k, d, dp[K][N], a[N][N][K];
int main ()
{ int tt = 0; while(scanf("%d %d",&n,&k),n+k) { for(int i = 1; i...
阅读全文
摘要:状态压缩+记忆化搜索状态压缩对位运算要求的较多。对位运算不熟的话就复习一下吧。纯正的暴力然后用记忆化搜索剪枝。碰到合适的情况就转移。【向右或向左】求最后在棋盘上剩余最少的棋子数目。代码如下:#include #include #include using namespace std;
#define N 4500
int dp[N];
char s[25];
int dfs(int total)
{ int &ans = dp[total], temp; if(ans!=-1) return ans; ans = 0; for(int i = 0; i <...
阅读全文
摘要:目前我们可以接触到的大部分pc依然采用上世纪遗传下来的 BIOS + MBR 组合。 BIOS,基本输入输出系统 (Basic Input-Output System),是软件与硬件之间的一个接口,可以把它看作一个翻译在中文与英语之间,虽然两者完全不同,不过可以让大家了解 BIOS 所处的位置,BIOS 通常被写入一块 ROM 芯片连接在主板上,当然也有直接写入北桥的,不过相当少见。 BIOS 几乎是完全用汇编语言编写,很大程度上决定了主板的性能及稳定性,就像是同声翻译的速率和准确性一样。华硕主板 (ASUS) 加入 AI 人工智能的 P4P800 被称为世界上最聪明的主板,当然是华硕自称的。
阅读全文
摘要:在转换之前,首先让我们了解一下什么是GPT?为什么要转换?GPT:GUID Partition Table (GUID 分区表 磁盘分区样式支持最大卷为 18 EB (exabytes) 并且每磁盘最多有 128 个分区)我们可以到“磁盘管理”里面,右键点击下方的磁盘型号,看弹出的菜单,若有“转换为GPT磁盘”字样,说明你的硬盘分区是MBR模式;若有“转换为MBR磁盘”字样,说明你的硬盘分区是GPT模式。不过:如果你安装的是Win7(无论32位还是64位),你的硬盘分区肯定是MBR模式。如果你安装的是32位的Win8,你的硬盘分区仍然是MBR模式。只有你安装的是64位的Win8,你的硬盘分区才
阅读全文
摘要:各大OJ题目归类Posted on2012 年 8 月 8 日byadmin要时常听时常想时常进修,才是人生真正的生活生计体式格式。什么事也不抱,什么事也不学的人,没有生活生计的资格。—————————–最优化题目————————————-———————-动态规划SOJ1162 I-KeyboardSOJ2096 Maximum SubmatrixSOJ2111 littleken bgSOJ2505 The County FairSOJ2818 QQ音速SOJ2469 Exploring PyramidsSOJ1833 Base NumbersSOJ2009 Zeros and OnesSO
阅读全文
摘要:所谓的状态压缩就是把庞大的状态家族精简化。大多数都是用二进制表示状态的。状态:dp[i][j]表示第i行第j个状态所能达到的最大方案数目。状态转移:dp[i][j] += dp[i-1][k]代码如下:#include #include #define M 1000
#define N 15
#define MOD 100000000
bool a[N][N];
int m, n, dp[N][M], v[M];
void init()
{ int MAX = 1<<12, c = 0; for(int i = 0; i < MAX; i++) { ...
阅读全文
摘要:状态:d[i][j]表示第i个立方体第j个面朝上时塔的最大高度。状态转移:dp[i][j]= max{dp[k][l]]+1|a[i][j^1]==a[k][l]}; 输出路径用一个next数组记录下就可以了。代码如下:#include #include #define N 505
char ans[6][10] = {"front", "back", "left", "right", "top", "bottom"};
int n, a[N][6], next[N][6][
阅读全文
摘要:利用条件建图,然后在图中找到最长路径,状态:dp[i]表示以i为起点的最长路径长度。状态转移:dp[i] = {max(dp[j]+1)|g[i][j] = 1}代码如下:#include #include #include #define M 15
#define N 35
int m, n, a[N][M], g[N][N], d[N];
int comp(const void *aa, const void *bb)
{ return *(int*)aa-*(int*)bb;
}
int judge(int s, int t)
{ for(int i = 0; i ...
阅读全文
摘要:这道题目用到了最长上升子序列的o(nlogn)算法,建议没学过此类新算法的同学先做一下poj上的简单题目,学习一下求LIS的O(n^2)和O(nlogn)算法,资料见http://wenku.baidu.com/view/fe0deecea1c7aa00b52acb71.html这个题目让我们求波形序列,我们可以分成两个子问题,求1......i的上升序列长度len1和求n.....i上升序列长度len2,那么以i为中心的上升序列长度就是min(len1,len2)*2-1.思路:摘自百度文库。链接同上。。。算法2(nlogn):维护一个一维数组c,并且这个数组是动态扩展的,初始大小为1,c[
阅读全文
摘要:转自大神的话:刚开始想到的是用节点来进行dp。。。但是一看数量肯定是要超时的了。。。后来看到了 数据的范围比较小。。就想到了用数据来进行dp有的时候同样的方法在这个角度来看可能不行。。。但是换一个角度就海阔天空了。。。。状态:dp[i][j]表示用到长宽为i,j的砖所能达到的最大高度。状态转移:dp[i][j] = max(dp[i-1][j],dp[i][j-1])+w[i][j];这是我见过动归里比较偏向考察思路的题目,w[i][j]标识长宽为I,j的砖的个数。复杂度为o(m^2)(m= 100) .这个思路简直让复杂度发生了质变。代码如下:#include #include #inc..
阅读全文
摘要:最长不上升子序列。把最长上升子序列的代码稍微改动一下即可详解请见:http://wenku.baidu.com/view/fe0deecea1c7aa00b52acb71.html#include #include #define N 10005
int n, a[N], c[N], dp[N];
int search(int l, int r, int x)
{ int mid; while(lc[1]) j = 1; else if(a[i]<c[size]) j = ++size; else j = search(1,s...
阅读全文
摘要:状态:d[i]表示a[1.....i]的最长上升子序列状态转移:d[i] = max{d[j]+1|a[i]>a[j]}代码如下:#include #include #define N 1005
int n, a[N], d[N];
int main ()
{ int max; while(~scanf("%d",&n)) { for(int i = 1; i a[j]&&ans
#include #define N 1005
int n, a[N], c[N], dp[N];
int search(int l, int r, int x)
{
阅读全文
摘要:卡了我一天的题我还能说是水题吗。。。。开始的思路【半递推半搜索】虽然是不成熟的动规,但是我觉得至少还能过。看了人家比较成熟的思路却没有过。但最后还是用成熟的动规思路过的。代码挫在了写大数的地方。少了个等号,,,,状态:d[i][j]表示子串的前i-1个字符在母串前j-1个位置中出现的次数状态转移:(sub[i-1]==s[j-1])d[i][j] = d[i][j-1];(sub[i-1]!=s[j-1]) d[i][j] = d[i][j-1]+d[i-1][j-1];代码如下:#include #include #define M 10005
#define N 105
char s[..
阅读全文
摘要:动规, 记忆化搜索。。。。思路不难状态:dp[i][j]表示点(I,j)到终点的最短路径数目;状态转移:dp[i][j] = dp[i+1][j]+dp[i][j+1];还有就是这道题的测试数据很操蛋,两个数之间不是规律的有一个空格,有可能有多个空格,我卡到这一点上wa了好几次。所以说读取的时候要用字符串读取。代码如下;#include #include #define M 105
#define N 105
int m, n, a[N][N], d[N][N];
char s[N];
int dp(int x, int y)
{ int &ans = d[x][y]; i...
阅读全文
摘要:这道题跟动规没一毛钱的关系啊,我实在找不到状态转移,找不到记忆化搜索。。。用dfs写的代码。。。跑了19ms代码如下:#include #include #define N 105
char s[N];
char ans[4][20] = {"MUTANT","SIMPLE","FULLY-GROWN","MUTAGENIC"};
int dfs(int a, int b)
{ if(s[a]=='A'&&a==b-1) return 1; if(s[b-2]=='A'
阅读全文