dp
剁diodio
这个作者很懒,什么都没留下…
展开
-
LeetCode 1388. 3N块披萨 线性dp
题解:第一步:转化题意:如果我们要取在数组中的一个数。那么它左右相邻的数都没办法取。以此类推,取的第一个数就与第二数不是相邻的,那么题意就转变为:在长度为3*n的数组取n个不相邻的数的最大值。第二步:考虑dp做法。dp[i][j][0]表示:选第i个数时已经选了j个数了。(第三维表示是否选择了第一位)那么可以从dp[j][i][0]转移过来。那么转移方程:dp[i][k][1]=max(dp[j][k-1][1]+slices[i],dp[i][k][1]);dp[i][k][0]=ma.原创 2022-01-05 20:30:25 · 262 阅读 · 0 评论 -
TZOJ 6455: 学学学 状压dp
题目描述:题解:难道是上一道的状压dp给了我自信?难道还是我真的有做dp的天赋?(逃这里我们直接枚举(1<<17)种情况就好了。如果当前状态满足。那我们就在这个状态的基础上减掉一种算法,然后检测这种状态是否满足。如果满足,我们就可以直接转移了。#include<bits/stdc++.h>using namespace std;const int N=1e5+5;typedef long long LL;int n,m;int f[20][20];LL dp[原创 2022-01-04 18:38:00 · 301 阅读 · 0 评论 -
LeetCode 1349. 参加考试的最大学生数 状压dp
题目描述:题解:模拟周赛的时候卡住了,就直接去看题解去了(hh看了题解其实很简单:枚举每一列dp[i][j],i表示第i行,j表示第i行的每一种状态。判断第j种是否成立。如果成立就枚举它前面一行的k的状态。如果满足条件,后面一排的人看不到前一排的人的答案,那我们就可以愉快的状态转移了:dp[i][j]=max(dp[i-1][k]+num,dp[i][j])num表示这一行的人数。class Solution {public: bool check(int k,vector&l原创 2022-01-04 18:31:28 · 373 阅读 · 0 评论