随笔分类 - dp
1
摘要:/*简单dp,要记录顺序解:先排序,然后是一个最长下降子序列 ,中间需记录顺序dp[i]=Max(dp[i],dp[j]+1);*/#include#include#include#define N 1100/*w,s代表重量和速度,index记录原来输入时的顺序下标,pre指向排序后的上一个下标...
阅读全文
摘要:#include#include#define N 2001#define inf 0x3fffffffint a[N],dp[N][N];int Min(int v,int vv) {return v>vv?vv:v;}int cmp(const void *a,const void *b) {r...
阅读全文
摘要:/*递推公式dp[i]=MAX(dp[i-1],dp[i-2]+a[j])*/#include#include#define N 210000int a[N],f[N],dp[N];int Max(int v,int vv) {return v>vv?v:vv;}int main() { i...
阅读全文
摘要:/*状态转移方程式:dp[i][j]=Min(dp[i][j-1],dp[i-1][j-2]+(a[j-1]-a[j])*(a[j-1]-a[j]));依次求出第i个人在第j个数时的所求的最小值*/#include#include#define N 5100int dp[1100][N];int a...
阅读全文
摘要:/*参看博客地址:http://blog.csdn.net/oceanlight/article/details/7857713重点是取完最优的后剩余的rest=n%lcm+lcm;中性价比小的数目num#include#include#define ll __int64ll gcd(ll a,l...
阅读全文
摘要:/*题意:给定每个点在平面内的坐标,要求选出一些点,在这些点建立加油站,使得总花费最少(1号点必须建立加油站)。在i点建立加油站需要花费2^i。建立加油站要求能使得汽车从1点开始走遍全图所有的点并回到1点,途中汽车加油次数不限,每个加油站的使用次数不限,但是汽车油箱有上限d(加满油可以跑距离d)。第...
阅读全文
摘要:/*poj 2096第一道概率dp看别人的思路,不过总算理解为什么求期望从后往前了地址:http://blog.csdn.net/morgan_xww/article/details/6774708*/#include#include#define N 1100double dp[N][N];in...
阅读全文
摘要:#include#include#include#define inf 0x3fffffff#define N 1100struct node {int l,r;}f[N];int ff[N];double d;int Min(int aa,int bb) {return aa>bb?bb:aa;}...
阅读全文
摘要:/*刚开始我考虑0的情况,想将他剔除就将lcmn设为-1,这样还要判断0和lcmn是-1的情况很麻烦而且但是一直出错后来觉得不用管0的情况就行了,可以认为符合。解:将lcmn离散化,因为1-9的公倍数必是2520的因子并且只有48个所以用一个数组离散化,记忆的时候直接调用离散数组即可因为一个数的所有...
阅读全文
摘要:#include#include#define N 20#define ll __int64ll dp[N][N];//最多记忆400种情况ll digit[N];ll dfs(ll len,ll cnt,ll ok) { if(!len) return cnt; if(!ok&&dp[len][c...
阅读全文
摘要:/*数位dp水题开两维一个记录长度,一个记录上一个数*/#include#include#define N 13int dp[N][N];int digit[N];int dfs(int len,int cnt,int ok) { if(!len)return 1; if(!ok&&dp[len]...
阅读全文
摘要:/*数位dp题意:找到1-n之间包含13这个子串并且能够整除13的数解:刚开始dp[N][N][2]这里的2用来记录是否为13表示当前位是否为13,我把上一位为1当前位为13和上一位部位1这种情况在数组中没有记录。*/#include#include#define N 14int dp[N][N][...
阅读全文
摘要:转载:http://blog.csdn.net/wdcjdtc/article/details/39177905#include"cstdlib"#include"cstdio"#include"cstring"#include"cmath"#include"queue"#include"algor...
阅读全文
摘要:/*题意:求出p-q的第j个nya数数位dp,求出p-q的所有nya数的个数很好求,但是询问求出最终那个第j个值时是我不会求了看了下别人的思路具体就是把p-q的第j个转化成0-q的第low+j个(其中low为小于等于p的nya数)枚举q的每一位数字,枚举位数值并进行比较直至求出每一位的值。经典好题,...
阅读全文
摘要:/*数位dp,记忆化搜索写法注意memset(dp,-1,sizeof(dp))是放在外面的,这样保证每次搜索时存的值满足下一次也可以用;如果放在里面就会超时每个长度有10000种状态*/#include#include#define N 20int len,digit[N],dp[N][1000...
阅读全文
摘要:/*状压dp刚开始&写成&&看了好长时间T0T.状态转移方程 dp[i][k][j]=Max(dp[i][k][j],dp[i-1][l][k]+num[i][j]);(第i行的第j个状态有上一行的第k个状态得到) num[i][j]有两个功能,第一:判断第i行第j个状态是否合法 ...
阅读全文
摘要:/*数位dp用记忆化搜索写很清爽啊!不用推状态转移方程good。开一个二维数组用来储存前len状态对10取余,有10种状态0-9;然后直接过一遍就行了*/#include#include#define ll __int64#define N 20ll digit[N],dp[N][11];ll d...
阅读全文
摘要:/*记忆化搜索,第二维判断是否是6*/#include#include#define N 9int dp[N][2],digit[N];int dfs(int len,int cnt,int ok) {//cnt代表是否是6,ok代表前一个是当前为最大值,并且当前也是最大值 if(!len)ret...
阅读全文
摘要:/*题意:平面上n个点,确定一条连接各点的最短闭合旅程且每个点仅用一次。这个解的一般形式为NP的(在多项式时间内可以求出)建议通过只考虑双调旅程(bitonictour)来简化问题,这种旅程即为从最左点开始,严格地从左到右直至最右点,然后严格地从右到左直至出发点。每个点都要走一次,且每个点只能走一次...
阅读全文
摘要:/*限制条件 1.同行不能相邻 2.上下不能相邻 3.不能在零的地方放东西解: 求出各行合法的状态,为第一行的和法状态赋值为1 从上到下合并状态dp[i][j]=(dp[i][j]+dp[i-1][k])%mod(其中j。k 为i和i-1行合法的状态) 也就是说把上一行的状态数目存储到dp[i...
阅读全文
1
浙公网安备 33010602011771号