DP ZOJ 2745 01-K Code】的更多相关文章

题目传送门 题意:要求任意连续子序列中0和1的数量差不超过k的方案数 分析:想好状态其实不难.dp[i][j][k]表示考虑前i长度,后缀中最大的 sum(0) - sum(1) = j, sum (1) - sum (0) = k的方案数,合并以下可以得到最大的|sum(0) - sum(1)| = j + k,所以j+k <= K,最后考虑当前i放0或1就可以转移状态了. #include <bits/stdc++.h> using namespace std; typedef lo…
1.hdu 2126 Buy the souvenirs 题意:给出若干个纪念品的价格,求在能购买的纪念品的数目最大的情况下的购买方案. 思路:01背包+记录方案. #include<iostream> #include<cstdio> #include<cstring> using namespace std; ; ; int cnt[maxw]; int dp[maxw]; int p[maxn]; int main() { int t; scanf("%…
题意: 给N×M的棋盘.每天随机找一个没放过棋子的格子放一个棋子 问使得每一个每列都有棋子的天数期望 思路: dp[i][j][k] 代表放了i个棋子占了j行k列 到达目标状态的期望 然后从 dp[n*m][n][m] 往后递推就好了. 由于知道了有i个棋子 比如一个状态dp[6][3][3] x x x o o o x o o o o o x o x o o o o o o o o o 对于 dp[i+1][3][3] 事实上就是3*3剩下的空再放一个,概率就是(j*k-i) / (n*m-i…
目录 问题描述 问题分析 问题求解 Java代码实现 优化方向一:时间方面:因为是j是整数是跳跃式的,可以选择性的填表. 思考二:处理j(背包容量),w(重量)不为整数的时候,因为j不为整数了,它就没办法作为数组下标使用. 总结 问题描述 有n个物品,第i种物品的价值为\(p_i\)重量为\(W_i\),选一些物品到一个容量为C的背包里,使得背包内物品在总重量不超过C的前提下,价值尽量大. 问题分析  在之前我们了解贪心思想的时候曾经有过类似的题目那时候物品是可拆分的我们只需要选择单位重量最大的…
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1745 题目大意:一个串由N个字符组成,每个字符是‘0’或者是‘1’,在任意一段连续的子序列中,要求0和1的个数的差不超过K,求一共有多少种这样的串,比如N=4,K=3时,除了0000和1111外的其他四个字符的串都符合要求. Sample Input 1 2 4 3 Sample Output 2 14 分析: 这种涉及到任意子区间的性质的问题,如果每个子区间都考虑…
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1561 The more, The Better Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 9590    Accepted Submission(s): 5568 Problem Description ACboy很喜欢玩一种战略游戏,…
Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , such as dog’s , cow’s , also he went to the grave …The bone collector had a big bag with a volume of V ,and along his tri…
http://acm.hdu.edu.cn/showproblem.php?pid=5375 Gray code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 988    Accepted Submission(s): 551 Problem Description The reflected binary code, also kn…
Course Selection System ZOJ - 3956 这个题目居然是一个01背包,我觉得好难想啊,根本就没有想到. 这个题目把题目给的转化为  ans = a*a-a*b-b*b 这个可以看成 当b不变的时候 a 越大越好. 这个就可以用01背包来解决 #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <algor…
题目传送门 /* DP:dp 表示当前输入的x前的包含x的子序列的和, 求和方法是找到之前出现x的位置(a[x])的区间内的子序列: sum 表示当前输入x前的所有和: a[x] 表示id: 详细解释:http://blog.csdn.net/u013050857/article/details/45285515 */ #include <cstdio> #include <algorithm> #include <cmath> #include <iostrea…