ZOJ 3626 Treasure Hunt I
摘要:一道树形DP+01背包的题。用dp[k][j]表示以k的根的树用j天最多可以得到多少宝藏,m是天数限制,因为要往返,所以将m/2以后就可以直接计算单程的值了。#include <stdio.h>#include <string.h>#include <stdlib.h>#include <algorithm>///dp[k][j]表示以k的根的树用j天最多可以得到多少宝藏using namespace std;const int MAXN = 105;int e;int n, k, m;int first[MAXN], next[MAXN <
阅读全文
posted @
2012-09-12 11:26
找回失去的
阅读(213)
推荐(0)
HDU 3415 Max Sum of Max-K-sub-sequence
摘要:题目给出的是一个环状的序列,所以可以在序列后面复制前k个数字。如果用sum[i]来表示复制过后的序列的前i个数的和,那么任意一个子序列[i..j]的和就等于s[j]-s[i-1]。对于每一个j,用s[j]减去最小的一个s[i](i>=j-k+1)就可以得到以j为终点长度不大于k的和最大的序列了。将原问题转化为这样一个问题后,就可以用单调队列解决了。单调队列确实是一种很实用的结构,本题中保持单调递增,队首元素就是我们需要的那个最小元素,保证待插入的j-1位置对应的sum值要大于队尾元素。#include <stdio.h>#include <string.h>#in
阅读全文
posted @
2012-09-12 09:56
找回失去的
阅读(236)
推荐(0)
ZOJ 3631 Watashi's BG
摘要:这道题思路不难,用01背包的思想来解这道题,一个M的背包装N个物品,这N个物品的权值和体积都是vi,很简单的一个模型,直接用背包的方法解的话,不止会超内存,而且会超时,这样WA了一遍之后寻求另一种写法。然后就用深搜加剪枝过了这道题。排序后从大的取起。/*Accepted 180 KB 0 ms C++ (g++ 4.4.5) 795 B 2012-09-11 16:03:06*/#include <stdio.h>#include <string.h>#include <stdlib.h>#include <algorithm>using nam
阅读全文
posted @
2012-09-11 16:09
找回失去的
阅读(321)
推荐(0)