zoj-3802-Easy 2048 Again
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相关推荐
- 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 ...
- zoj3802:easy 2048 again(状压dp)
zoj月赛的题目,非常不错的一个状压dp.. 题目大意是一个一维的2048游戏 只要有相邻的相同就会合并,合并之后会有奖励分数,总共n个,每个都可以取或者不取 问最终得到的最大值 数据范围n<= ...
- zoj 3761 Easy billiards 并查集+dfs
生活真是奇妙的东西,这样的题目居然能被联想到这样的算法,只能说智商不够啊. 这道题目的意思不解释了,月赛的时候我队友已经想出来了做法,但是我们最后还是没A. 题解: 1.首先将所有能连接的球连接起来, ...
- ZOJ 3761 Easy billiards 月赛E DFS
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3761 题目大意:给定n个位置的小球,小球的运动方向只能是水平或者 ...
- ZOJ-3802:Easy 2048 Again(2048游戏 状态压缩dp)
题目链接:点击打开链接 题目大意: 给一些连续的点,从第一个点走到最后一个点,可以选择走或者不走,走的两个点相同则合为新的点,并奖励额外的分数.这个操作是可以一直递推的,例如16,8,4,2. 若下一 ...
- problem solving automation
分工一定要明确啊啊啊啊啊 Nero 数据结构 图论 DP 博弈 JayYe 数论 DP 模拟搜索 博弈 wuyiqi 数论 数据结构 图论 字符串 模拟搜索 几何 20 ...
- zoj 3791 An Easy Game
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3791 题目大意:给你两个长度为n的01串,第一个为起始串,另一个为目标串. ...
- ZOJ 3867 Earthstone: Easy Version
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3867 题意:跟炉石游戏里的规则也差不多.给你两个小兵 有生命和攻 ...
- 是男人就下100层【第五层】——2048游戏从源代码到公布市场
上一篇<是男人就下100层[第五层]--换肤版2048游戏>中阳光小强对2048游戏用自己的方式进行了实现,并分享了核心源码,这一篇阳光小强打算将该项目的全部源码公开并结合这个实例在这篇文 ...
- LibSVM学习(六)——easy.py和grid.py的使用(转)
我们在"LibSVM学习(一)"中,讲到libSVM有一个tools文件夹,里面包含有四个python文件,是用来对参数优选的.其中,常用到的是easy.py和grid.py两个文 ...
最新文章
- 【转】为什么要写技术博,写在前面的话
- pythonlbp纹理提取_Python + OpenCV 实现LBP特征提取的示例代码
- win10编辑js文件报错,错误','
- 头插法和尾插法创建链表(有无头结点)
- python装饰器系列(五)
- php $key{$x},Thinkphp 3.x key可控注入(?)
- 三十万,买一只基金,放着不管,五年后会怎么样?
- 关于jacob支持BSTR类型的经验总结
- Word Count Example of Hadoop V1.0 – Mapper的实现
- Java基础知识强化21:Java中length、length()、size()区别
- [收藏]DIV中控制超级链接的方法
- 2018大学计算机答案,2018年大学计算机基础试题及答案
- 2021年认证杯SPSSPRO杯数学建模D题(第一阶段)停车的策略全过程文档及程序
- 计算机课数据排序与筛选ppt,《EXCEL 数据排序与筛选》教学设计
- Postman如何设置成中文?(汉化)
- Goolge-TPU论文解读
- 瀚高数据库php连接,HighGo瀚高数据库4.3版本安装说明
- linux安装frps服务,ubuntu搭建frps服务
- ctf解题--当眼花的时候,会显示两张图(隐写)
- 数据分析真题日刷 | 京东2019春招京东数据分析类试卷