HDU4945 2048(dp)】的更多相关文章

先是看错题意..然后知道题意之后写了发dp..无限TLE..实在是不知道怎么优化了,跑了遍数据是对的,就当作理论AC掉好了.. #pragma warning(disable:4996) #include <iostream> #include <cstring> #include <string> #include <vector> #include <cstdio> #include <queue> #include <al…
HDU 4945 2048 题目链接 题意:给定一个序列,求有多少个子序列能合成2048 思路:把2,4,8..2048这些数字拿出来考虑就能够了,其它数字不管怎样都不能參与组成.那么在这些数字基础上,dp[i][j]表示到第i个数字,和为j的情况数,然后对于每一个数枚举取多少个,就能够利用组合数取进行状态转移,这里有一个剪枝,就是假设加超过2048了,那么后面数字的组合数的和所有都是加到2048上面,能够利用公式一步求解,这种整体复杂度就能够满足题目了.然后这题时限卡得紧啊.10W内的逆元不先…
3851: 2048 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 22  Solved: 9[Submit][Status] Description Teacher Mai is addicted to game 2048. But finally he finds it's too hard to get 2048. So he wants to change the rule: You are given some numbers. Every…
思路: 这个题写了一个背包的解法,超时了.搜了下题解才发现我根本不会做. 思路参见这个: 其实我们可以这样来考虑,求补集,用全集减掉不能组成2048的集合就是答案了. 因为只要达到2048就可以了,所以求补集会大大减小枚举的次数. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <…
ZOJ Monthly, August 2014 E题 ZOJ月赛 2014年8月 E题 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5334 Easy 2048 Again Time Limit: 2 Seconds      Memory Limit: 65536 KB Dark_sun knows that on a single-track road (which means once he passed this…
题意:给n(n<=100,000)个数,0<=a[i]<=2048 .一个好的集合要满足,集合内的数可以根据2048的合并规则合并成2048 .输出好的集合的个数%998244353 . 比赛的时候想着1跟3可以合并成4 ....然后就越搞越复杂了.....2048玩得不多的我没有透彻的合并规则概念..... 看了题解写了发,妥妥地TLE...本地随意n=100,000都TLE了... 用dp[i][j]表示当前 i个2^j 的方案数 然后队友提醒优化,就是,当枚举到比如,value =…
zoj月赛的题目,非常不错的一个状压dp.. 题目大意是一个一维的2048游戏 只要有相邻的相同就会合并,合并之后会有奖励分数,总共n个,每个都可以取或者不取 问最终得到的最大值 数据范围n<=500 , a[i]={2,4,8,16}: 分析: 首先明确一下自动合并的意思,比如原有 8,4,2,进入一个2 就会变成16 所以我们需要记录前面的所有数字..计算了一下发现最大情况,500个16会合成4096 =2^12 显然全部记录是不可能的.那么怎么处理呢 我们发现,只有递减的序列才有可能向前合…
Easy 2048 Again Time Limit: 2 Seconds      Memory Limit: 65536 KB Dark_sun knows that on a single-track road (which means once he passed this area, he cannot come back again), there are some underground treasures on each area of the road which has th…
2048 Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 840    Accepted Submission(s): 199 Problem Description Teacher Mai is addicted to game 2048. But finally he finds it's too hard to get 2048.…
链接:problemId=5334">http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5334 题意:一个长度为500的数列.每一个数可能是2,4,8.16.从第一个開始取,每一个数能够选择取或者不取.假设取了x.这个数和之前的数假设同样.那么两个数会合并成为2*x而且收起来,假设不同就把这个数收起来. 思路:比方像要凑成2048,必须拥有一个1024,512,256,128,64,32,16,8,4,2中某段从1024…
考场上一个DFS优化乱加就对了一个无解的点 题目描述 给定一个长度为 n 的数列,在这个数列中选取一个子序列使得这个子序列中的数能合出2048 对于合并操作,可以选择这个序列中的任意两个数进行合并,当然这两个数必须是相同的(即2个x合并后成为一个2x) 对于每个序列,只要进行若干次合并操作后,这个序列中至少有一个2048(可以有其他数剩余),就称这个序列是合法的 我们可以认为只要选取的数在原数列中的位置不同,这些序列就是不同的 对于给定的数列,小朋友们需要算出有多少子序列是合法的,并把这个数 对…
号码塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 20786    Accepted Submission(s): 12486 Problem Description 在讲述DP算法的时候,一个经典的样例就是数塔问题,它是这样描写叙述的: 有例如以下所看到的的数塔,要求从顶层走究竟层.若每一步仅仅能走到相邻的结点,则经过的结点的数…
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3802 题意: 从数列A中, 删除若干个数(可以0个), 是删除后的数列, 进行类似  Flappy 2048 游戏的运算, 使结果最大, 求该最大值. 题解: 每个数ai, 取或不取, 满足 可用二进制表示. 当 ai < a[i + 1] 是, 易想到 如果两个数都取, ai 将不会在合并. 所以只需考虑ai[i + 1] 前的 降序列即可 .如果没个数都为…
zoj 上次的月赛题,相当牛的题目啊,根本想不到是状态压缩好吧 有个预先要知道的,即500个16相加那也是不会超过8192,即,合并最多合并到4096,只有2的12次方 所以用状态压缩表示前面有的序列组合,找到了符合的,就往上累加合并生成新状态,否则就添加到前面的状态的后面构成新状态,因为每一个的状态都由前一个所得,用滚动数组即可 #include <iostream> #include <cstdio> #include <cstring> #include <…
A. 小P的2048 模拟.....又没啥可说的,以后要认真打打模拟题了... B. 小P的单调数列 考场$n^2log(n)$的SB思路有人听吗 正解当然不是这样, 事实上我们每次选取的只有一段区间,或是两段区间 假设三段区间$a,b,c$,假设$(a+b)/2>(a+b+c)/3$得出$(a+b)/2>c$ 假设$c>(a+b+c)/3$得出$c>(a+b)/2$,也就是说我们我们不如选一个或两个区间优 其实自己想想也发现我们选多个区间不如选其中最大的一两段值更大 然后就很简单…
中文题,错排,求概率,不解释,核心思路同 HDU 1465 错排简单思路可看:http://www.cnblogs.com/laiba2004/p/3235934.html //错排,但是我之前叫了几次都是错的,所以,我去看了相关的知识,嘿嘿 #include<stdio.h> __int64 f(__int64 n) { ); ); ) ; )*(f(n-)+f(n-)); } int main() { __int64 t,n,sum,nn; scanf("%I64d",…
感谢:http://www.cnblogs.com/ka200812/archive/2011/08/11/2135607.html 让我搞懂了. #include <iostream> #include <cstring> #include<cstdio> #include <vector> using namespace std; int n,m; int dp[13][2048]; vector<int>num[13]; void chan…
例题: 最近小A遇到了一个很有趣的问题: 现在有一个\(n\times m\)规格的桌面,我们希望用\(1 \times 2\)规格的多米诺骨牌将其覆盖. 例如,对于一个\(10 \times 11\)的桌面,下面为一种合法覆盖方案: 那么给定n.m,应该如何覆盖呢? 但是小A并不满足于覆盖桌面,他希望知道能够覆盖整个桌面的合法方案数. 输入有 \(t\) 组数据,对于每组数据: 输入\(n.m\),输出合法方案数\(ans\),答案\(ans\)对\(10^9+7\)取模,每个答案占一行. 以…
 Time limit: 1000ms         Memory limits: 256MB Description 2048曾经是一款风靡全球的小游戏.今天,我们换一种方式来玩这个小游戏.现在,你有一个双端队列,你只能把元素从左端或从右端放入双端队列中.一旦放入就不得取出.放入后,若队列中有连续两个相同的元素,它们将自动合并变成一个新的元素——原来那两个元素的和.若新的元素与它相邻的元素相同,则继续合并……如:双端队列中有2, 4, 16三个元素.若将2从左端插入双端队列中,该队列将变成8…
题目:Mondriaan's Dream 链接:http://poj.org/problem?id=2411 题意:用 1*2 的瓷砖去填 n*m 的地板,问有多少种填法. 思路: 很久很久以前便做过的一道题目,状压DP,当时写得估计挺艰辛的,今天搜插头DP又搜到它,就先用状压DP写了下,顺利多了,没一会就出来了,可惜因为long long没有1A. 思路挺简单,一行一行解决,每一列用1 表示对下一行有影响,用0 表示对下一行没有影响,所以一行最多2048 种可能,然后要筛选一下,因为有些本身就…
做的第一道斜率优化\(DP\)QwQ 原题链接1/原题链接2 首先考虑\(O(n^2)\)的做法:设\(f[i]\)表示在\(i\)处建仓库的最小费用,则有转移方程: \(f[i]=min\{f[j]+\sum\limits_{k=j+1}^{i}P[k](X[i]-X[k])\}+C[i]\) 于是我们枚举\(i\),再从\(i-1\)开始从大到小枚举\(j\),并记录一个前缀和,每次更新一下\(f[i]\).洛咕上貌似拿了66分,数据太水: #include <cstdio> using…
总述 状态压缩动态规划,就是我们俗称的状压DP,是利用计算机二进制的性质来描述状态的一种DP方式 很多棋盘问题都运用到了状压,同时,状压也很经常和BFS及DP连用,例题里会给出介绍 有了状态,DP就比较容易了 举个例子:有一个大小为n*n的农田,我们可以在任意处种田,现在来描述一下某一行的某种状态: 设n = 9: 有二进制数 100011011(九位),每一位表示该农田是否被占用,1表示用了,0表示没用,这样一种状态就被我们表示出来了:见下表 列 数 1 2 3 4 5 6 7 8 二进制 1…
原文链接https://www.cnblogs.com/cly-none/p/9695526.html 题意:求有多少对集合\(S,T\)满足:\(S \subseteq \{1,2...n \}, T \subseteq \{1,2...m\},S \bigcap T = \emptyset\),且\(S\)中所有元素的异或和小于\(T\)中所有元素的异或和.对\(10^9+7\)取模. \(n,m \leq 2000\) 首先,通过记录当前两个集合的异或和,转移时考虑每个元素的3种选择,容易…
转载请注明原文地址http://www.cnblogs.com/LadyLex/p/8536399.html 听说今年省选很可怕?刷题刷题刷题 省选已经结束了但是我们要继续刷题刷题刷题 目标是“有思维难度的DP题”! 一,uoj316 这个不用多说……NOI2017的D1T3,难度肯定是有的 个人觉得那个dp方程难想…… #include <cstdio> #include <algorithm> #include <cstring> using namespace s…
显然直接 \(01\) 背包会超时并且超空间 套路:分层 \(DP\) 「考虑将每个子结构看作一层(也就是包含了不止 \(1\) 个物品的信息),并且大层不会对小层造成影响,可以考虑先进行每一层的自我更新(即用当前层物品更新当前层答案),再进行层的合并,此时考虑低层对高层的影响」 正题 那么这题有一个特殊性质: \(V_i = a \times 2^b\) b值大的物品不会影响零碎剩余的重量上限. 将物品按b值分阶段处理. 那么就是分层 \(DP\) 先通过普通的 \(01\) 背包更新当前层自…
1.光剑 (sword.pas/c/cpp) [题目描述] 小林和亮亮各有一把光剑,长度分别为 a 和 b,他们拿光剑进行比试.每一回合,长光剑会砍向短光剑,砍完后,短光剑完好无损,而长光剑则被截成两段,被截去的长度恰好等于短光剑的长度.若两把光剑长度相等,则比试结束.请问小林和亮亮将比试多少回合? [输入格式] 第一行一个整数 T,表示数据组数. 接下来 T 行每行两个正整数 a,b,表示初始状态光剑的长度. [输出格式] 每组数据输出一个整数,表示能进行几个回合的比试. [样例输入] 3 1…
传送门 Description 给定一个1*n的地图,在里面玩2048,每次可以合并相邻两个(数值范围1-40),问最大能合出多少.注意合并后的数值并非加倍而是+1,例如2与2合并后的数值为3. Input 输入的第一行是一个数字n,代表地图大小.然后n行,i+1行代表第i个数的大小 Output 输出仅一行,为最大能合并出的大小 Hint 1<=n<=248,不保证所有的数字能被合成完 Sample Input Sample Output solution 典型的区间DP.首先考虑区间dp最…
题目描述--->P2622 关灯问题II 没用的话: 首先第一眼看到题,嗯?n<=10?搜索? 满心欢喜地敲了一通搜索. 交上去,Wa声一片? 全部MLE! 这么坑人神奇? 一想,可能是爆栈了 emmm 思考了一番看了下题解&&标签 哦原来是状压DP 情不自禁地分析 n<=10. 最多只有(2<<10)-1=1023种状态 我们完全可以用数组存储状态. 以样例为例: 算了 太辣鸡了,我自己瞎出吧. 如果n=8,即一共有8盏灯. 初始状态它们全开着,我们可以认为…
Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N) Output 所得的方案数 很明显\(N \leq 9\)状压DP啊 qwq. 这里有限制,我们只能放\(K\)个国王,并且如果一个格子有国王,其周围八个格子都不能放. 设状态\(f[i][j][k]\)代表前…
题目 我们称一个正整数N是幸运数,当且仅当它的十进制表示中不包含数字串集合S中任意一个元素作为其子串.例如当S=(22,333,0233)时,233是幸运数,2333.20233.3223不是幸运数. 给定N和S,计算不大于N的幸运数个数. 题解 有一道scoi2013的数数比这道题丧病多了... 这道题还是比较好做的. 给定范围的时给定了n的长度,并且要求计算数的个数. 所以可以基本确定这是一道数位dp了. 然后又要求有一部分串不能出现 这是经典的在AC自动机上的dp了. 所以我们需要在拿到的…