FZU 1896 神奇的魔法数 dp】的更多相关文章

网上都说是数位dp 但是虽然在队伍里负责动态规划 但是数位dp还不会…… 百度了一下 发现和最大子序列思路差不多…… 最大子序列的dp[i][j]是表示两个序列前i项和前j项的最大子序列…… dp[i][j]表示前i位 尾数是j的魔法数的个数…… 也不是特别不好理解…… 但是还要好好理解一下…… #include<stdio.h> #include<math.h> #include<string.h> #include<algorithm> using na…
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2129 dp[i]表示前i个数的子序列个数 当a[i]在i以前出现过,dp[i] = dp[i - 1]*2 - dp[pre - 1],pre表示a[i]在i之前的位置 当a[i]在i以前没有出现过,dp[i] = dp[i - 1] *2 + 1 //#pragma comment(linker, "/STACK:102400000, 102400000") #include <algor…
bzoj-1187 HNOI-2007 神奇游乐园 题目大意:经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细一看,才发现这是一个游乐场,专为旅途中疲惫的人设计.娱乐场可以看成是一块大小为n×m的区域,且这个n×m的区域被分成n×m个小格子,每个小格子中就有一个娱乐项目.然而,小P并不喜欢其中的所有娱乐项目,于是,他给每个项目一个满意度.满意度为正时表示小P喜欢这个项目,值越大表示越喜欢.为负时表示他不喜欢,这个负数的绝…
描述有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40.John现在有n个想要得到的物品,每个物品的体积分别是a1,a2……an.John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品.现在的问题是,John有多少种不同的选择物品的方式.输入输入的第一行是正整数n (1 <= n <= 20),表示不同的物品的数目.接下来的n行,每行有一个1到40之间的正整数,分别给出a1,a2……an的值.输出…
题目链接:找兔子 n的范围是[1, 15],可以用0 到 (1<<n)-1 的数表示全部状态,用dp[i] = t表示到达状态i的最少时间是t,对于每个点,如果它能到达的所有点在t秒时都已经确定了会不会有兔纸,那这个点就确定了在(t+1)s会不会有兔纸.对于每个时刻,可以询问<=2个点,所以由初始状态可以搜到最后确定能不能找到兔纸. 我没有想到找不到兔纸的数据... 关键是dp的思想==很巧妙. 附代码: #include <stdio.h> #include <str…
麻麻我会写插头dp了! 推荐陈丹琦论文:https://wenku.baidu.com/view/3e90d32b453610661ed9f4bd.html 破题调一年 #include <cstdio> #include <cstring> <<; ],a[][],b[N],g[N][],f[][][N]; void up(int &x,int y) {if(x<y) x=y;} void dfs(int x,int s,int k) { ) { if(…
题意:n*m的矩阵内值有正有负,找一个四连通的简单环(长度>=4),使得环上值的和最大. 题解:看到2<=m<=6和简单环,很容易想到插头DP,设f[i][j][k]表示轮廓线为第i行第j列,插头状态为k的最大满意度.然后又成了一道插头DP的板子题.注意左插头为左括号,上插头为右括号,其余位置无插头,因为题目不要求走遍所有格子,且只能走一条回路. #include<bits/stdc++.h> using namespace std; ,mod=; ],w[][],a[][N…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3790 [题目大意] 问最少用几个回文串可以构成给出串,重叠部分可以合并 [题解] 我们先用manacher处理出每个位置最长的回文串, 那么题目就转化为求最少的线段来覆盖全区间,那就是经典的dp题了, dp[i]=min(dp[j]+1)(i线段的左端点-1和j线段的右端点有交) 用树状数组优化一下即可. [代码] #include <cstdio> #include <al…
Description 题意给定一个矩阵,每个格子有权值,在[-1000.1000]内,求一条回路使得回路经过权值和最大,每个格子最多经过一次 2≤n≤100,2≤m≤6 Code #include <cstdio> #include <algorithm> #define N 10 #define Inf 0x7fffffff using namespace std; int A[N],now,op[N],k[N],L[N],Ans=-Inf; int n,m,g[110][N]…
传送门 大概是算第一道自己做出来的插头dp? (虽然都是照着抄板子的) (虽然有个地方死活没调出来最后只能看题解才发现自己错在哪里的) 我就当你们都会插头dp了…… 因为必须得是一条路径,所以扫描线上的插头得两两对应,要用括号序列 然后分情况讨论一下,记$p1$为当前关键格左边的插头,$p2$为当前关键格上面的插头 $0$表示无插头,$1$表示左括号,$2$表示右括号 1.$p1==0$且$p2==0$ 那么很明显我们可以把下方插头设为$1$右方插头设为$2$,就形成一个新的连通块了 然后注意不…