随笔分类 - 动态规划:入门
【洛谷P1970】花匠
摘要:主要有两种做法: 乱搞和dp dp相对来说考虑的特殊情况少一些 最重要的一点就是: 为了避免类似:(1 2 2 2 1 )的情况, 我们需要一个q记录“前”一个数 p记录当前数 判断时 p > ( < ) q & & p > ( a [ i + 1 ] )即可 1 #include<cstdio>
阅读全文
【洛谷P2409】Y的积木
摘要:这是一道dp…… f [ i ] [ j ] 表示前 i 组,总和为 j 时的方案数 f [ i ] [ j + a [ i ] [ k ] ] <-- f [ i - 1 ] [ j ] 1 #include<cstdio> 2 #include<cstring> 3 #include<algor
阅读全文
【洛谷P1064】金明的预算方案
摘要:对于每一个主附件集合无非有:五种状态: 1:不选 2:主件 3:主件+附件1 4:主件+附件2 5:主件+附件1+附件2 所以对于每个主附件集合转化为至多4个物品(价值和与代价和),01背包即可 1 #include<cstdio> 2 #include<cstring> 3 using names
阅读全文
【洛谷P1108】低价购买
摘要:O(n^2) LIS 附带方案数 思路: b [ i ] :以第i天为结尾,最大购买次数 f [ i ] :到第i天,最大购买次数 ok [ a [ i ] ]:在与 a [ i ] 价格相同的情况下,该价格是否为最优 y:当前 i ,循环到 j 时的最大 b [ ] 转移方程:b [ i ] =
阅读全文
【洛谷2066】机器分配
摘要:思路: f[i][j]表示前i个公司分配j台机器能得到的最大收益 c[i][j]表示第i个公司分配j台机器能得到的最大收益 这样就可以从上往下推 第三重循环控制变量k为前i-1个公司分配的机器数, 那么显然第i各公司能分到j-k台机器 转移:f[i][j]=max(f[i][j],f[i-1][k]
阅读全文
【洛谷1130】红牌
摘要:思路: f[i][j]表示前i步在第j个小组的最短天数 转移:f[i][j]=min(f[i-1][j],f[i-1][x])+f[i][j] 注:当j==1时,x=m;else x=j-1 1 #include<cstdio> 2 #include<cstring> 3 using namespa
阅读全文
【洛谷1877】音量调节
摘要:思路: f[i][j]表示第i首歌音量为j是否可行(0/1) 初始f[0][bl]=1; 一层层往下推.最后取第n行最大的j 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 int n,bl,ml,f[51][1001]
阅读全文
【洛谷2782】友好城市
摘要:我们可以以北岸城市为关键字将友好城市排序。 这样就将问题转换成,求南岸最长上升子序列LIS。 顺便提一句LIS的几种算法。 首先是O(n^2), 设dp[i]表示以i为结尾的最长上升子序列的长度,则状态转移方程为: dp[i] = max{dp[j]+1}, 1<=j<i,a[j]<a[i]. 其次
阅读全文
【洛谷1359】租用游艇
摘要:初始状态f[1]=0;f[2]=a[1][2]; 对于每个i,有i-1个中转点j;(中转点可以为1,表示直接到达不进行中转) 这样,可以选择从1直接到达i,或从1到j,再从j到i。取两者最小值。 1 #include<cstdio> 2 #include<cstring> 3 #include<al
阅读全文
浙公网安备 33010602011771号