http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5334

/**
题意:给你n个数去合并(这n个数只包含2,4,8,16),先挑选一些数得到这些数的和,然后把这些数合并得到的值相加,使得最后的值最大。
题解:状态压缩。我们可以把取得数放进队列使得队列的值按从大到小排序能合并的尽量合并 (队列最多13个数)16 * 500 = 8000 < (1 << 13)
注:这题要用到滚动数组(只用当前行和上一行 用1代表当前行 0代表上一行)
**/
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 1<<13
#define M 550
int dp[2][maxn];
int b[M];
int main(){
//    freopen("1.txt","r",stdin);int t,n;cin >> t;while(t --){cin >> n;for(int i = 1;i <= n;i++)cin >> b[i];memset(dp,-1,sizeof(dp));dp[0][0] = 0 ;int cnt = 1 << 13 ;for(int i = 1;i <= n;i++){for(int st = 0;st <= cnt;st++){if(dp[(i-1)%2][st] != -1){ //不放dp[i%2][st] = max(dp[i%2][st],dp[(i-1)%2][st]) ;int tmp = 0;if(st){ //找到队列的最小值for(int j = 0;j <= 12;j ++){if(st & (1<<j)){tmp = (1 << j);break;}}}if(tmp > b[i])//如果tmp 大于当前这个数则加入队列dp[i%2][st + b[i]] = max(dp[i%2][st + b[i]],dp[(i-1)%2][st] + b[i]);else if(tmp < b[i])//如果tmp小于当前这个数则加入队列并把前面的数全部清空dp[i%2][b[i]] = max(dp[i%2][b[i]],dp[(i-1)%2][st] + b[i]);else {//如果tmp等于当前这个数,则合并int S = st,sum = b[i] , res = b[i];while(S&res){sum += res * 2;S -= res;res <<= 1;}dp[i%2][res + S] = max(dp[i%2][res + S],dp[(i-1)%2][st] + sum);}}}}int ans = 0;for(int i = 0;i <= cnt;i++)ans = max(ans,dp[n%2][i]);cout << ans << endl;}return 0;
}

zoj-3802-Easy 2048 Again相关推荐

  1. ZOJ 3802 Easy 2048 Again 状态压缩dp

    题目 Easy 2048 Again -–zoj 3802 Time Limit: 2 Seconds Memory Limit: 65536 KB Dark_sun knows that on a ...

  2. zoj3802:easy 2048 again(状压dp)

    zoj月赛的题目,非常不错的一个状压dp.. 题目大意是一个一维的2048游戏 只要有相邻的相同就会合并,合并之后会有奖励分数,总共n个,每个都可以取或者不取 问最终得到的最大值 数据范围n<= ...

  3. zoj 3761 Easy billiards 并查集+dfs

    生活真是奇妙的东西,这样的题目居然能被联想到这样的算法,只能说智商不够啊. 这道题目的意思不解释了,月赛的时候我队友已经想出来了做法,但是我们最后还是没A. 题解: 1.首先将所有能连接的球连接起来, ...

  4. ZOJ 3761 Easy billiards 月赛E DFS

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3761 题目大意:给定n个位置的小球,小球的运动方向只能是水平或者 ...

  5. ZOJ-3802:Easy 2048 Again(2048游戏 状态压缩dp)

    题目链接:点击打开链接 题目大意: 给一些连续的点,从第一个点走到最后一个点,可以选择走或者不走,走的两个点相同则合为新的点,并奖励额外的分数.这个操作是可以一直递推的,例如16,8,4,2. 若下一 ...

  6. problem solving automation

    分工一定要明确啊啊啊啊啊 Nero 数据结构  图论   DP   博弈 JayYe  数论   DP   模拟搜索 博弈  wuyiqi 数论  数据结构   图论 字符串 模拟搜索  几何  20 ...

  7. zoj 3791 An Easy Game

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3791 题目大意:给你两个长度为n的01串,第一个为起始串,另一个为目标串. ...

  8. ZOJ 3867 Earthstone: Easy Version

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3867 题意:跟炉石游戏里的规则也差不多.给你两个小兵 有生命和攻 ...

  9. 是男人就下100层【第五层】——2048游戏从源代码到公布市场

    上一篇<是男人就下100层[第五层]--换肤版2048游戏>中阳光小强对2048游戏用自己的方式进行了实现,并分享了核心源码,这一篇阳光小强打算将该项目的全部源码公开并结合这个实例在这篇文 ...

  10. LibSVM学习(六)——easy.py和grid.py的使用(转)

    我们在"LibSVM学习(一)"中,讲到libSVM有一个tools文件夹,里面包含有四个python文件,是用来对参数优选的.其中,常用到的是easy.py和grid.py两个文 ...

最新文章

  1. 【转】为什么要写技术博,写在前面的话
  2. pythonlbp纹理提取_Python + OpenCV 实现LBP特征提取的示例代码
  3. win10编辑js文件报错,错误','
  4. 头插法和尾插法创建链表(有无头结点)
  5. python装饰器系列(五)
  6. php $key{$x},Thinkphp 3.x key可控注入(?)
  7. 三十万,买一只基金,放着不管,五年后会怎么样?
  8. 关于jacob支持BSTR类型的经验总结
  9. Word Count Example of Hadoop V1.0 – Mapper的实现
  10. Java基础知识强化21:Java中length、length()、size()区别
  11. [收藏]DIV中控制超级链接的方法
  12. 2018大学计算机答案,2018年大学计算机基础试题及答案
  13. 2021年认证杯SPSSPRO杯数学建模D题(第一阶段)停车的策略全过程文档及程序
  14. 计算机课数据排序与筛选ppt,《EXCEL 数据排序与筛选》教学设计
  15. Postman如何设置成中文?(汉化)
  16. Goolge-TPU论文解读
  17. 瀚高数据库php连接,HighGo瀚高数据库4.3版本安装说明
  18. linux安装frps服务,ubuntu搭建frps服务
  19. ctf解题--当眼花的时候,会显示两张图(隐写)
  20. 数据分析真题日刷 | 京东2019春招京东数据分析类试卷

热门文章

  1. 如何进行有效的数据治理,提升数据价值?
  2. 抢鲜体验:十一大行业 demo 全新上线!
  3. selenium+chromedriver监测视频流源地址时允许flash自动启用
  4. 移动端HTML5长按图片会选中页面中某个位置的文字
  5. Linux-0.00运行环境搭建【转】
  6. WebApplicationContext初始化
  7. UVa 11388 - GCD LCM
  8. 求1/2+1/4+...+1/n
  9. RDC Hydrogen
  10. if some one want to buy it