给出n个物品 最多能拿k个 选取的物品的总重量不能超过w
因为每个物品只有一个 转移顺序为
for(int i=0; i
for(int j=w; j>=b[i]; j--)
for(int l=1; l
保证了一个物品只放进一次
#include
#include
#include
#include
...
分类:
其他好文 时间:
2014-09-11 21:02:12
阅读次数:
114
双调欧几里得问题,复习一下。。把所有的点按照x排序,设计状态f(i,j)表示走在前面的那个走到了i点,后面那个在j点,所需的最小,那么转移显而易见。f(i,j) = min(f(i - 1,j) + dist(i,i - 1), f(i,i - 1) + dist(i,j))直接顺着推过去可能好理解...
分类:
其他好文 时间:
2014-09-11 20:55:02
阅读次数:
234
给定母串S和待匹配串T,求T能在母串S中匹配多少次(不一定要连续匹配,并且母串中多个相同字母可以依次使用,但均只能使用一次,如S=rabbbit T=rabbit, 则S中三个连续的b可以依次匹配T中两个bb各一次())...
分类:
其他好文 时间:
2014-09-11 19:31:32
阅读次数:
139
这道题就题意来说其实就是一道简单的记录路径的0,1背包,告诉你n个物品,每种物品只能取一次,再有q个询问,问你是否能在满足选出物品的w之和为m的情况下,满足t之和为s的情况,若可以则任意输出一种方案。
因此我们可以设计状态,dp[i][j][k]为前i个物品选出部分,当t之和为j时,w之和为k的情况能否满足,若存在方案则为1,不存在则为0。而状态的转移方程也是很简单。
dp[i][j+t[i]...
分类:
其他好文 时间:
2014-09-11 19:23:52
阅读次数:
173
在linux使用cd的时候,可能会遇到目录比较深的时候,这个时候总是cd一个很长的目录会很麻烦,那有没有什么比较方便的方法呢?若是在两个目录中来回切换,这个时候可以使用cd - 这个命令,可以完成在两个目录中来回切换的作用,那为什么使用cd - 能够表示在两个目录中来回切换呢?因为cd - 等同于 ...
分类:
系统相关 时间:
2014-09-11 16:52:12
阅读次数:
319
题目链接:http://poj.org/problem?id=3311
Floyd + 状态压缩DP
题意是有N个城市(1~N)和一个PIZZA店(0),要求一条回路,从0出发,又回到0,而且距离最小。
状态:dp[S][v]表示从v出发访问剩余的所有顶点(集合S),最终回到顶点0的路径的权重总和最小值。
#include
#include
#inc...
分类:
其他好文 时间:
2014-09-11 15:21:52
阅读次数:
161
点击打开链接
有向图
把强联通分量缩点后得到一个DAG,然后DP。
#include
#include
#include
#include
#include
#include
using namespace std;
const int maxn = 1000 + 10;
vector G[maxn];
int dfn[maxn], low[maxn], sccno...
分类:
其他好文 时间:
2014-09-11 11:13:41
阅读次数:
159
最大独立集 = 补图的最大团
最小顶点覆盖 + 最大独立集 = V
#include
#include
const int maxn =100 + 10;
int g[maxn][maxn], dp[maxn], n;
int x[maxn], ans[maxn], mx;
int dfs(int *adj, int ns, int dep) {
int t[maxn];...
分类:
其他好文 时间:
2014-09-11 11:11:11
阅读次数:
188
我肯定还没怎么理解树形dp啊...为什么写下去 就感觉是多了个状态转移方程的深搜呢?或者因为树形dp是依托在树这个数据结构上所进行的 所以是这样的?这题 被很多人 当做树形dp的入门题 的确....如果 u 是 v 的前驱即父母 那么dp[u][0] += max( dp[v][1] , dp[v]...
分类:
其他好文 时间:
2014-09-11 11:05:41
阅读次数:
193