上一页 1 ··· 6 7 8 9 10 11 12 13 下一页
摘要: 这个题写的。。有点纠结啊。主要是如果从某地运东西到一个城镇时,根据已知城镇的spoons的数量倒推回去求原来的那个地点spoons的数量有点点麻烦,这里处理好了就应该没有问题了。还有这个字典序的问题。。这里ASCII码越小,字典序越小。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <queue> 4 #include <vector> 5 #include <cstdio> 6 #define INF 0x3f3f3f3f3f3f3f3fLL 7 #de 阅读全文
posted @ 2012-12-13 23:56 浙西贫农 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 怒刷水题。。我说怎么会TLE 原来是自己记忆化搜索写挫了。。对比才知道dijkstra比bellman跑的快好多啊。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <queue> 4 #include <vector> 5 #include <cstdio> 6 #define maxn 1010 7 using namespace std; 8 typedef pair <int,int> pii; 9 int d[maxn],dp[maxn 阅读全文
posted @ 2012-12-12 14:45 浙西贫农 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 刷水题,贴代码。比较裸的树形DP。。dp(i,j)表示以i节点为根节点用j天时间能够获得的最大价值。由于要往返,m除以2就可以了。View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #define maxn 101 5 using namespace std; 6 int n,m,start,e; 7 int dp[maxn][maxn],next[maxn << 1],v[maxn << 1],cost[maxn << 1] 阅读全文
posted @ 2012-12-11 15:11 浙西贫农 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给定一个容量为V(题目里是D)的背包和N(题目里是V)件物品各自的体积,求有多少种方法使得背包再也装不下任何物品。思路:既然要使背包装不下任何物品,也就是说这时剩下的物品中体积最小的那一件也不能装入背包,所以就可以枚举剩下的最小体积的这件物品来进行动态规划了。定义dp[i]=装满体积为i的背包的方法数,volumn[i]=第i件物品的体积,sum[i]=前i件物品的体积之和。现在要枚举剩下的物品中体积最小的那一件了。先将所有物品按体积大小排序。首先明确,当第i件物品作为剩下的体积最小的物品时,前i-1件物品就都已经被放到背包里面去了。这时,背包剩余体积为V-sum[i-1];由于不能 阅读全文
posted @ 2012-11-16 15:25 浙西贫农 阅读(364) 评论(0) 推荐(0) 编辑
摘要: 这个题在暑假集训的时候做组队训练赛的时候做过,当时状态方程是我推出来的,但是WA了10+次吧。但是这次写,还是WA了很多次。所以总结一下,DP的话,能用递推写还是尽量用递推写吧,记忆化写的话可能会出现问题,这个应该是我水平问题吧。方程是这样的:dp(i,j,1) =(dp(i - 1,j - 2,1) + dp(i - 1,j - 1,1) * 2 + dp(i - 1,j,1)+ dp(i - 1,j - 2,0) + dp(i - 1,j - 1,0) * 2) % MOD;dp(i,j,0) =(dp(i - 1,j,0) + dp(i - 1,j - 1,0) + dp(i - 1,j 阅读全文
posted @ 2012-11-13 23:23 浙西贫农 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 本题乃水题是也。dp(i)表示当前在第i格时,到达终点需要掷骰子次数的期望。dp(i)=1/6(dp(i + 1) + dp(i + 2) + dp(i + 3) + dp(i + 4)+ dp(i + 5) + dp(i + 6))+1。如果i可以直接跳到某点j,则dp(i)=dp(j)。View Code 1 #include <iostream> 2 #include <cstdio> 3 #define maxn 100010 4 using namespace std; 5 6 int next[maxn]; 7 double d[maxn]; 8 int n 阅读全文
posted @ 2012-10-22 22:02 浙西贫农 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 静态链表。。STL要超时。。View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <vector> 4 #include <cstring> 5 using namespace std; 6 7 vector<int> G[50001]; 8 int dp[50001],visit[50001],head[50001]; 9 int n,k;10 struct Edge11 {12 int v;13 int next;14 }edge[50001 * 2];15 阅读全文
posted @ 2012-10-15 14:26 浙西贫农 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 实际上,这个题不难,状态很好写:balace[i]=max(size[j],N-size[i]),其中i是j的父节点,size[i]表示以节点i为根节点所构成子树的节点总数。一遍dfs就可以搞定。题目里给的数据是告诉你每两个节点之间有一条边,而不是父子节点关系。。。View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <vector> 4 #define MAX 0xffffff 5 using namespace std; 6 7 vector <int> G[20001] 阅读全文
posted @ 2012-10-11 21:27 浙西贫农 阅读(160) 评论(0) 推荐(0) 编辑
摘要: View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <vector> 5 using namespace std; 6 7 int n,len; 8 char name[201][101]; 9 int dp[201][2]; 10 int special[201][2]; 11 vector <int> G[201]; 12 13 int max(int a,int b) 14 { 15 if(a > b) re 阅读全文
posted @ 2012-10-09 19:39 浙西贫农 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 树形DP入门啦。View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <vector> 5 using namespace std; 6 7 int n,len; 8 int dp[6001][2]; 9 int value[6001];10 bool flag[6001];11 vector <int> G[6001];12 13 int max(int a,int b)14 {15 if(a > b) retur 阅读全文
posted @ 2012-10-09 19:37 浙西贫农 阅读(143) 评论(0) 推荐(0) 编辑
上一页 1 ··· 6 7 8 9 10 11 12 13 下一页