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

浙公网安备 33010602011771号