Divide_and_Conquer
文章平均质量分 66
yurio7r
ipy8pyp
展开
-
HDU 1069 Monkey and Banana
给你n种类型的长方体,每种的个数不限,求这些长方体堆起来最高为多少。要求在上方的长方体的长与宽要严格小于下面的。定义状态,dp[i]:以第i个长方体结尾最高为多少,状态转移方程就是dp[i] = max(dp[1~i-1]) + 第i个长方体的高。在最开始要对长方体进行排序。#include #include #include #include using namespace std原创 2016-04-06 21:37:32 · 305 阅读 · 0 评论 -
HDU 1176 免费馅饼
这个题目和最基础的那个金字塔型的那种dp问题很类似。定义状态dp[i][j]:表示在i这个时间在j这个位置可以得到的最大的饼的数目;状态转移方程: dp[i][j] = user_max(dp[i + 1][j - 1], dp[i + 1][j], dp[i + 1][j + 1]) + arr[i][j];其中user_max是自己写的一个比较三个数中最大的数的函数,arr[i][j]这个原创 2016-04-06 23:20:37 · 299 阅读 · 0 评论 -
CodeForces 622C Not Equal on a Segment
利用一个辅助数组存序号就行了。#include #include const int MAX = 2e5 + 5;int arr[MAX];int pre[MAX];int main(){ int n, q; scanf("%d%d", &n, &q); for (int i = 1; i <= n; ++i) { scanf("%d", &arr[i]); i原创 2016-03-14 16:36:42 · 507 阅读 · 0 评论 -
HDU 1260 Tickets
给你k个人,每个人单独买票的时间以及两个人合并买票的时间,问最少卖光票需要多久时间。dp[i]表示前i个人买好票最少需要花费的时间,状态转移方程:dp[i] = dp[i] = min(dp[i - 1] + arr1[i], dp[i - 2] + arr2[i - 1]);其中arr1[i]表示第i个人单独买票的时间,arr2[i]表示i+1这个人和i这个人合并买票的时间。#incl原创 2016-04-08 16:49:21 · 331 阅读 · 0 评论 -
HYSBZ 1026 windy数
从别人那里学的数位dp,,然后直接套模板写的。。#include #include #include #include using namespace std;int dig[15];int dp[15][10][2];//pos表示当前的数位,pre表示前一个数位上的数//sta表示前面是否存在非0的数,limit表示当前的数是否受限于前一个数位上的数int dfs(int原创 2016-04-28 19:24:06 · 578 阅读 · 0 评论