
ACM_dp 动态规划
文章平均质量分 58
thatTime
这个作者很懒,什么都没留下…
展开
-
lightoj 1038 - Race to 1 Again
这是一道用动态规划求数学期望的题目。题目的意思是说任何一个大于1的整数,, 经过若干次除以自己的因子之后可以变为1, 求该变换字数的数学期望值。例如 16 数以自己的因子之后可以变为1 2 4 8 16;有数学期望的计算公式可得该数学期望为1 2 4 8 16的数学期望之和由此可得递推公式#include #include double dp[100000+10];int m原创 2013-08-21 13:01:14 · 1438 阅读 · 0 评论 -
hdu 1864 最大报销额
01背包问题的变形以发票张数作为背包容量,选出可以报销的发票进行动态规划dp[i][j] = max(dp[i-1][j-1] + v[i], dp[i-1][j]);#include #include #include using namespace std;double dp[35], v[35], q, u;int f[35], n, m;char ch;int原创 2013-10-18 21:58:54 · 748 阅读 · 0 评论 -
hdu 1506 1505
hdu 1506题意:求一个直方图中最大的矩形面积#include #include using namespace std;int a[100010], l[100010], r[100010];int main(){ int n; while(scanf("%d", &n), n) { for(int i=1; i<=n; i++) {原创 2013-11-02 13:53:16 · 661 阅读 · 0 评论 -
最长上升子序列的变形
poj 3616#include #include #include using namespace std;typedef struct { int s, e, v;}point;point a[1010];int dp[1010], n, m, r;bool cmp(point a, point b){ return a.e < b.e;}int mai原创 2014-02-03 11:19:52 · 779 阅读 · 0 评论 -
UVA 437 The Tower of Babylon
题意:给你n种方块, 每种方块有无限多种,要求当原创 2014-07-16 15:30:11 · 602 阅读 · 0 评论 -
UVA 11404 Palindromic Subsequence
题意:给你一个字符串, 求最长的回文子序列, 若答案不唯一, 则输出zidia原创 2014-07-16 12:59:51 · 873 阅读 · 0 评论 -
LA 4256 Salesmen
题意:原创 2014-07-16 20:42:07 · 1090 阅读 · 0 评论 -
UVA 11552 Fewest Flops
题意:给你一个字符h原创 2014-07-18 09:29:58 · 683 阅读 · 0 评论 -
UVA 10817 Headmaster's Headache
题意:校长#include #include #include using namespace std;const int inf = 0x3f3f3f3f;int dp[110][7000], cnt[10], vis[10];int s, n, m;char str[100];bool is_digit(char c) { if原创 2014-07-19 14:44:31 · 768 阅读 · 0 评论 -
UVA 11584 Partitioning by Palindromes
题意: 给定一个字符串, 问最少分为几部分可使各buf原创 2014-07-13 19:08:07 · 978 阅读 · 0 评论 -
hdu 2955 Robberies 01背包问题
01背包的变形问题:以银行的总钱数为背包容量,概率作为价值求解dp[i][j]表示从前i家银行偷得j元的不被抓的概率,转移方程为 dp[i][j] = max(dp[i][j], dp[i-1][j-m[i]]*(1-p[i])); #include #include using namespace std;double limit_p, p[110], dp原创 2013-10-11 15:51:07 · 661 阅读 · 0 评论 -
lightoj 1031 - Easy Game
区间dp;这道题我是在看了几份阶梯报告之后才想通的,现在想想很符合动态规划的要求d(i, j)表示取数的人在数组i 到 j中能取的的最大值,然后中间枚举分割点, ans = max(ans, sum[k]-sum[i-1]-d(k+1, j)); ans = max(ans, sum[j]-sum[k-1]-d(i, k-1));采用和记忆化搜索的方式#原创 2013-08-29 12:23:55 · 1682 阅读 · 0 评论 -
poj 3264 Balanced Lineup
RMQ(Range Minimum/Maximum Query)问题: RMQ问题是求给定区间中的最值问题。当然,最简单的算法是O(n)的,但是对于查询次数很多(设置多大100万次),O(n)的算法效率不够。可以用线段树将算法优化到O(logn)(在线段树中保存线段的最值)。不过,Sparse_Table算法才是最好的:它可以在O(nlogn)的预处理以后实现O(1)的查询效率。下面把Sp原创 2013-08-20 13:46:58 · 670 阅读 · 0 评论 -
poj 3311 Hie with the Pie
这道题主要是运用floyd算法加状态压缩dp, 有一定综合性, 但还算是一个水题, 就是这样一个水题, 做了我将近一天,其实想到这个题目怎么做的不难,但是因为我优先级弄错, 找了一天错误没有找出来。可先用floyd算法求出任意两个点之间的最短距离, 这样才能保证时间最短,然后采用状态压缩dp.#include #include using namespace std;const int原创 2013-08-23 13:30:33 · 718 阅读 · 0 评论 -
lightoj 1044 - Palindrome Partitioning
题目要求将一个字符串进行分割成n段之后, 每一段都是回文的, 求出最小的n深深地感觉DFS的强大, 不是太懂dfs的我还没完全理解这题的解法,过段时间学了dfs在回来看看吧#include #include #include using namespace std;int dp[1005], f[1005][1005];char s[1005];int l;bool ok(int原创 2013-08-23 18:41:38 · 1095 阅读 · 0 评论 -
lightoj 1037 Agent 47
还是转台压缩dp,在状态转移时只需在已经杀死的目标中挑选对下一个目标杀伤力最大的枪即可#include #include #include using namespace std;const int maxn = (1<<15) + 10;const int inf = 99999999;int dp[20][maxn], cost[20][20], a[20];char s[2原创 2013-08-24 16:18:59 · 1332 阅读 · 0 评论 -
lightoj 1036 - A Refining Company
挺好的一个题目,要注意解题时满足一个性质, 即若一个格子选了往左, 则该格子左侧的格子都往左, 同理一个格子若选择了往上, 所有上面的格子都选择往上想来想去, 采用递推似乎不好进行, 这里用记忆化搜索#include #include using namespace std;int ura[510][510], rad[510][510];int row[510][510], co原创 2013-08-27 17:22:23 · 1325 阅读 · 0 评论 -
lightoj 1011 Marriage Ceremonies
这个题目一个技巧就是采用二进制记录当前的状态例如 :010101表示第1列, 第3列,第5列已经标记过, 下次不能再取 。#include #include using namespace std;int a[20][20];int dp[20][(1 << 16) + 20];int main(){ int t, ca; ca = 1; scanf("%d", &t);原创 2013-08-16 15:49:34 · 1258 阅读 · 0 评论 -
最长公共子序列的动态规划求解
#include #include int dp[110][110], c[110][110];char a[110], b[110], str[110];int la, lb, l;void find(int i, int j){ if(i==0 || j==0) return; if(c[i][j] == 1) { str[l] =原创 2013-08-16 11:15:39 · 795 阅读 · 0 评论 -
hdu 4681 string
2013 Multi-University Training Contest 8这是我第一次做多校联合的题目,虽然当时一道也没有做出来,但谁不是这样起步的呢?1 利用贪心的思想, 先枚举a, b字符串中包含c的最短区间, 然后两次for循环求区间两端的最长公共子序列长度, 取最大值加上c的长度就是答案了2 求最长公共子序列之前可进行预处理,这样每次处理时只要调用即#incl原创 2013-08-17 10:59:18 · 864 阅读 · 0 评论 -
lightoj 1013
1013 - Love CalculatorPDF (English)StatisticsForumTime Limit: 2 second(s)Memory Limit: 32 MBYes, you are developing a 'Love calculator'. The software wo原创 2013-08-18 18:42:50 · 1002 阅读 · 0 评论 -
UVA 10534 Wavio Sequence
题意:给定一个长度为n的xuli原创 2014-07-15 11:26:50 · 614 阅读 · 0 评论