随笔分类 - DP——背包
摘要:题目链接:http://codeforces.com/problemset/problem/403/D/**算法分析: 这道题综合的考察了dp背包思想和组合数学*/#include#define MAXN 1050#define PI acos(-1.0)#define MOD 1000000007#define REP(i,n) for(int i=0; i>>">>"=d; i--) for(int j=min(d+1,50); j>=1; j--) dp[i][j] = (dp[i][j] + dp[i-d][j-1])%MOD;...
阅读全文
摘要:题目链接:http://acm.bupt.edu.cn/onlinejudge/newoj/showProblem/show_problem.php?problem_id=1267/**算法分析:*/#include#include#include#include#include#include#include#include#include#include#include#include#define MAXN 505#define PI acos(-1.0)#define INF 0x3f3f3f3f#define REP(i,n) for(int i=0; i>>"
阅读全文
摘要:题目链接:http://codeforces.com/problemset/problem/212/E题目大意:给你一个无向树,现在用两种颜色去给这颗树上的节点染色。用(a,b)表示两种颜色分别染的节点数。满足以下条件:1.任何一种颜色至少使用一次,即a>=1&&b>=1。2.两种颜色染的节点不能相邻,即不能有边的两端染不同色。要你使a+b值最大下输出不同的(a,b),按照a升序输出。算法思路:很容易得出一个结论:a+b的最大值就是取n-1,即只有一个点不染色。我们就想到树形dp。先dfs求出以每个节点为根的树的节点数。假如我们讨论以u为根的树的染色方案,我们就要知
阅读全文
摘要:#include#include#include#include#includeusing namespace std;const int maxn = 100;int dp[maxn][maxn]; //dp[i][j]表示以i为根,保留j个点的最大权值。int N,Q;int G[maxn][maxn];int num[maxn]; //以i为根的树的节点个数。//这里处理的时候要注意可以把边的权值压倒儿子节点。void dfs(int u,int fa){ num[u] = 1; for(int v=1;v0;i--){ //相对于下面的V -> 0 ...
阅读全文
摘要:题目链接:http://lightoj.com/volume_showproblem.php?problem=1017#include #include #include #include #include #include #include using namespace std;const int maxe = 50000;const int maxn = 105;const int INF = 0x3f3f3f;int main(){ //freopen("E:\\acm\\input.txt","r",stdin); int Y[maxn]; i
阅读全文