2012年7月19日
摘要: SPOJ_4560 这个题目相当于将两个串个各分成了数量相等若干段,如果将对应的两小段看成一组,那么每组只能选其一累加,求最后的和最大是多少。因此可以用两个指针指向这两个数组,初始时两个指针都位于最左边,然后遍历这两个数组,如果某个指针指向的值较小,那么就累加这个这个值并使指针位置加1,当出现两个指针所指的值相等时,就说明遍历完成了一组,选择其中较大的累加即可。#include<stdio.h>#include<string.h>#define MAXD 10010int N, M, a[MAXD], b[MAXD], suma, sumb;void init(){ i 阅读全文
posted @ 2012-07-19 18:04 Staginner 阅读(334) 评论(0) 推荐(0) 编辑
摘要: 一开始反应的是用状态压缩dp来做,后来一看步数很小,只有三步,于是直接暴力就可以了。另外由于测试数据比较多,可以先从最终状态BFS一遍,保留下所有结果,然后每次判断就是O(1)的了。#include<stdio.h>#include<string.h>#define MAXD 20#define MAXM 160#define MAXS 100010#define INF 0x3f3f3f3fint first[MAXD], e, dis[MAXS], next[MAXM], v[MAXM];int q[MAXS];const int ini = (1 << 阅读全文
posted @ 2012-07-19 16:26 Staginner 阅读(370) 评论(0) 推荐(0) 编辑