![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
cc_hw
这个作者很懒,什么都没留下…
展开
-
rqnoj 26 合唱队形(双向序列dp)
http://www.rqnoj.cn/problem/26这道题 第一眼看的时候 没仔细读题,以为是求最长上升序列,以为以前写过,当时就直接拍码了写了一半才发现原来是要求先上升再下降。。。。。。。。。。上升最长的加下降最长的,可以求max(dp[i},dp[j]+1)求最长上升,然后求最长下降当时想的是把上升和下降写到同一个for里 #includeint main(原创 2014-03-12 19:17:59 · 638 阅读 · 0 评论 -
维基oi 1098 均分纸牌
这道题可以用贪心的方法把一个问题的整体慢慢的优化成为更加简单的问题 在n个数中 先把其从第一个数开始作为一个处理开端 求平均就不说了 如果第一个数是平均数,就可以直接跳过第一个数(如程序中的 continue) 如果不是平均数,把它的值减去平均数向左移动(如果为正本就应该向左,为负可看作后面的数向右移结合它,步数都相同) #include using namespace原创 2014-03-31 09:05:44 · 490 阅读 · 0 评论 -
poj 1738 dp 石子归并
这是一道区间类型的dp问题令f[i,j]表示归并第i个数到第j数的最小代价,sum[i,j]表示第i个数到第j个数的和,这个可以事先计算出来。sum[i,j]可以在O(1)的时间内算出.容易的到以下的动态转移方程:阶段:以归并石子的长度为阶段,一共有n-1个阶段。状态:每个阶段有多少堆石子要归并,当归并长度为2时,有n-1个状态;当归并长度为3时,有n-2个状态;当原创 2014-03-30 22:50:36 · 674 阅读 · 0 评论 -
维基oi 线段覆盖 3027 序列dp
#includestruct inf{ int left; int right; int v; int max;};int main(){ int n,ans=0; inf num[1001]; scanf("%d",&n); for(int i=0;i<n;i++) {原创 2014-03-30 22:57:58 · 516 阅读 · 0 评论 -
poj 3253 贪心 同 合并果子
这道题 和合并果子 一样 每次得到最优解每次把得到的结果进行再次贪心最后得到最优解#include#define swap(a,b) a=a^b,b=a^b,a=a^bint main(){ int n; long long ans=0; long long num[20008]; scanf("%d",&n); for(int i=原创 2014-03-17 20:10:26 · 661 阅读 · 0 评论 -
poj 3617 贪心 不难 容易错 Total Submissions: 8060 Accepted: 2489
首先看到这道题会想到贪心 每次取前面一个字符或者后面一个字符但是会发现当前面和后面相等的时候就不好取了如果相等,如果现在取的下一个字符比较小,就可以和他相对的字符组合就可以比较下一个字符然后去小的这道题 题目 容易忽略 每80个换行在这个for(int i=0;left+i中left+iwrong 了很多次。。。。。。。。。。。#includeint原创 2014-03-16 20:42:00 · 528 阅读 · 0 评论 -
poj 1050 序列dp
poj 1050 题目大意为 输入一个n 和一个n*n的矩阵,求最大子矩阵值首先看到这道题可能想到序列dp,序列dp中有求一个序列中最大子序列和,一个矩阵的和可不可以转换成序列的和我们可以不第1行的值累加到第n行的上就得到了从第一行开始的矩阵的序列值,然后dp第n行的最大子序列,就得到了一个最大矩阵和同样的,我们也可以从第二行开始然后问题原创 2014-03-09 10:11:15 · 602 阅读 · 0 评论 -
poj 1088 dp记忆化搜索状态( or dfs)
这道滑雪的题当时陈月航他们来讲过的,但是忘完了,就只记得这道题是dp+记忆化搜索这道题我先用dp递归的方式搜出来结果,感觉有点像搜索的样子,但是提交上去直接超时然后我就想到了貌似要用记忆化搜索,坑了很多次,中间忽略了两个地方(在代码中指出)其实这道dp和迷宫搜索很像,都是搜4个方向这道题的重点就是每搜索玩一个位置要这个位置搜出的状态,下次搜到这个位置就可以直原创 2014-03-09 13:30:48 · 840 阅读 · 0 评论 -
rnqoj 98 逃亡的准备 多重背包问题
http://www.rqnoj.cn/problem/98这个问题其实就是一个背包问题 只是他的背包有许多相同的,这样就增加了背包的水量,刚开始我使用一般背包问题的解法来解这道题结果直接超时我刚开始 写背包问题的时候也是像一半背包问题一样开 dp[n][tol] 个数组来存储数据,但是发现数据一大就不能存了,然后就发现每次循环 的时候除了上一成得到的dp值,前面的都木有用了,然后又发现原创 2014-03-13 15:52:39 · 1176 阅读 · 0 评论 -
csdn 采药,一维dp
#include#includeint main(){int W,n;while(scanf("%d%d",&W,&n)!=EOF){int w[101],v[101];int dp[101][1001];for(int i=0;i<n;i++){scanf("%d%d",&w[i],&v[i]);}memset(dp,0,sizeof(dp));for(int i=原创 2014-03-23 15:31:56 · 481 阅读 · 0 评论