DP
AC它真的很香
看心情写博客 | 健忘小天才
展开
-
Corn Fields
题目描述 农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形的土地。John打算在牧场上的某几格里种上美味的草,供他的奶牛们享用。 遗憾的是,有些土地相当贫瘠,不能用来种草。并且,奶牛们喜欢独占一块草地的感觉,于是John不会选择两块相邻的土地,也就是说,没有哪两块草地有公共边。 John想知道,如果不考虑草地的总块数,那么,一共有多少种种植方案可供他选择?(当然,把新牧场完全荒废也是一种方案) 输入格式 第一行:两个整数M原创 2020-08-16 15:24:42 · 403 阅读 · 0 评论 -
搬寝室
题目链接 将物品按质量递增排序后,从前i件物品中拿走j对(j*2<=i)时, (1)不拿第i件,则dp[i][j]=dp[i-1][j],这个毫无疑问。 (2)拿第i件物品,则第i件物品肯定和第i-1件物品一起拿, 则dp[i][j]=dp[i-2][j-1]+(a[i]-a[i-1])^2,即从前i-2件中 拿j-1对的疲劳值加上拿了最后两件物品的疲劳值 (当然,由前到后处理的,i和j前面的所有情况都已经处理好了,都是最小值)。 状态转移方程:dp=min((1),(2))——— dp[i][j]=原创 2020-08-06 15:06:33 · 134 阅读 · 0 评论 -
C Rabbit的工作(1)
题目链接 很明显的DP了,但是这个题有意思的一点是要用滚动数组,不然会MLE。 首先看到n是400,400400400也不到1e8,可以用n^3的暴力。 所以联想到dp数组要开三维,正常来说是这三维:dp[i][j][k] i表示前i天,j是已经工作了j天,k是到目前已连续工作了多少天。 那么很容易得到转移方程: 如果这天不工作或者这天本来就不用工作:dp[i][j][0]=min(dp[i][j][0],dp[i-1][j][k]) 如果今天需要工作:dp[i][j][k]=min(dp[i][j][k]转载 2020-08-05 12:49:35 · 225 阅读 · 0 评论 -
P1164 小A点菜
题目链接 定义dp[i][j]表示还有i道菜品,还剩下j块钱的选择方案数 动态转移方程 (1)if(j==第i道菜的价格)dp[i][j]=dp[i-1][j]+1; (2)if(j>第i道菜的价格) dp[i][j]=dp[i-1][j]+dp[i-1][j-第i道菜的价格]; (3)if(j<第i道菜的价格) dp[i][j]=dp[i-1][j]; 在吃与不吃之间选择。若钱充足,办法总数就等于吃这道菜的办法数与不吃这道菜的办法数之和;若不充足,办法总数就只能承袭吃前i-1道菜的办法总数。依原创 2020-08-03 12:31:49 · 151 阅读 · 0 评论