随笔分类 -  动态规划

摘要:n个数,分组,数Ai要在至少含有Ai个数的组,求最多分多少组。 方法一:大的数应该尽量跟大的在一起,这样才能让小的出现很多很多组,所以从大到小排序,给当前序列中最大的数x分x个数。代码如下: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<st 阅读全文
posted @ 2017-08-07 20:08 Blue233333 阅读(171) 评论(0) 推荐(0)
摘要:S<=50只股票D<=10天的价格给出,求第一天开始用n<=200000元最后能得到的最大钱数,保证答案<=500000。 做D次完全背包即可,每次做完把dp数组清空。 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #i 阅读全文
posted @ 2017-08-03 11:17 Blue233333 阅读(317) 评论(0) 推荐(0)
摘要:n<=2000个数,把它修改成不上升或不下降序列所要改变的数值总共最小是多少yy一下可得最后改成的数值肯定是原数组数值中的某一个感觉一下,相邻两个数如果有冲突要改,那肯定把他们改成两者之一的数才较好,具体证明不会。。f(i,j)--前i个数,最后一个改为第j小(第j大)的数,答案是多少f(i,j)= 阅读全文
posted @ 2017-07-28 17:05 Blue233333 阅读(269) 评论(0) 推荐(0)
摘要:n<=50000个点的树,求选最多不相邻点的个数。 f[i][0]=sigma max(f[j][0],f[j][1]),j为i的儿子 f[i][1]=sigma f[j][0],j同上 死于未初始化。不要歧视水题。 1 #include<cstdio> 2 #include<cstring> 3 阅读全文
posted @ 2017-07-26 17:39 Blue233333 阅读(199) 评论(0) 推荐(0)
摘要:len<=2000的字符串上,给出删掉和添加每种字符的花费,求把字符串变成回文串的最小花费。 首先每个字符添加和删除是一样的,因此花费在添加和删掉每个字符的花费中取小的。 如果每个字符的花费都是1,就是找最长回文串再用len减掉即可。(manacher!) 加了花费同理,就是找“最大权回文串”再用每 阅读全文
posted @ 2017-07-26 11:14 Blue233333 阅读(257) 评论(0) 推荐(0)
摘要:n<=40000个<=m<=n的数,一段数不和谐(河蟹???)度为该段中不同数的个数的平方,求把n个数划成若干段后的最小不和谐度。 好题。首先可以确定是DP,f[i]=min(f[j]+P(j+1,i)),其中P(l,r)表示区间l到r的不同数的个数的平方。n2,过不了。 不过可以发现f是不下降的。 阅读全文
posted @ 2017-07-21 18:26 Blue233333 阅读(155) 评论(0) 推荐(0)
摘要:题目大意:把一个只含1,2,3的序列改成形如111……222……333……或333……222……111……的形式最少改几个数。 题解:光看这个数列无从知晓答案,所以试着采用DP。由于每个数变1,2,3与后面的数怎么变密切相关,所以F[i][j]表示前i个数中,第i个数变j后满足第一种形态的最少次数, 阅读全文
posted @ 2016-12-11 10:38 Blue233333 阅读(279) 评论(0) 推荐(0)