ZOJ 3802 Easy 2048 Again 状态DP
zoj 上次的月赛题,相当牛的题目啊,根本想不到是状态压缩好吧
有个预先要知道的,即500个16相加那也是不会超过8192,即,合并最多合并到4096,只有2的12次方
所以用状态压缩表示前面有的序列组合,找到了符合的,就往上累加合并生成新状态,否则就添加到前面的状态的后面构成新状态,因为每一个的状态都由前一个所得,用滚动数组即可
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int dp[][*];
int A[];
int n;
int main()
{
int ti;
scanf("%d",&ti);
while (ti--)
{
memset(dp,-,sizeof dp);
scanf("%d",&n);
for (int i=; i<=n; i++)
{
scanf("%d",&A[i]);
}
int pos=;
int ans=;
dp[][]=;
for (int i=; i<=n; i++)
{
for (int j=; j<*; j++)
{
if (dp[pos^][j]==-) continue;
dp[pos][j]=max(dp[pos][j],dp[pos^][j]);
ans=max(ans,dp[pos][j]);
int t=j;
int q=A[i]-;
int sum=A[i];
if ((t&q)==)
{
int k=A[i];
while ((t&k))
{
sum+=k<<;
k<<=;
}
t&=~(k-);
t|=k;
}
else t=A[i];
dp[pos][t]=max(dp[pos][t],dp[pos^][j]+sum);
ans=max(ans,dp[pos][t]);
}
pos^=;
}
printf("%d\n",ans);
}
}
ZOJ 3802 Easy 2048 Again 状态DP的更多相关文章
- ZOJ 3802 Easy 2048 Again 像缩进DP
链接:problemId=5334">http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5334 题意:一个长度为5 ...
- Easy 2048 Again - ZOJ 3802 像缩进dp
Easy 2048 Again Time Limit: 2 Seconds Memory Limit: 65536 KB Dark_sun knows that on a single-tr ...
- ZOJ3802 Easy 2048 Again (状压DP)
ZOJ Monthly, August 2014 E题 ZOJ月赛 2014年8月 E题 http://acm.zju.edu.cn/onlinejudge/showProblem.do?proble ...
- [ZOJ 3662] Math Magic (动态规划+状态压缩)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3662 之前写过这道题,结果被康神吐槽说代码写的挫. 的确,那时候 ...
- hdu 4614 pieces 状态DP
题意:给你一个长度小于等于16的字符串,每次可以删除一个回文传,问你最少删除干净的字数. 状态+dp dp[i] = min(dp[i],dp[j]+dp[j^i]);(j是i的字串): 连接:htt ...
- hdu 4778 Gems Fight! 博弈+状态dp+搜索
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4102743.html 题目链接:hdu 4778 Gems Fight! 博弈+状态dp+搜 ...
- POJ 3254 压缩状态DP
题意:一个矩形网格,可以填0或1, 但有些位置什么数都不能填,要求相邻两个不同时为1,有多少种填法.矩形大小最大 12*12. 压缩状态DP大多有一个可行的state的范围,先求出这个state范围, ...
- 【状态DP】 HDU 1074 Doing Homework
原题直通车:HDU 1074 Doing Homework 题意:有n门功课需要完成,每一门功课都有时间期限t.完成需要的时间d,如果完成的时间走出时间限制,就会被减 (d-t)个学分.问:按怎样 ...
- Hdu 4539 【状态DP】.cpp
题意: 一个炮兵可以攻打和他之间曼哈顿距离为2的士兵,给出你一块n*m的战场,告诉你哪些地方可以站人哪些地方不可以,问你最多可以安放多少个士兵? n <= 100, m <= 10 思路: ...
随机推荐
- Python流程控制-1 顺序执行
流程控制指的是代码运行逻辑.分支走向.循环控制,是真正体现我们程序执行顺序的操作.流程控制一般分为顺序执行.条件判断和循环控制. 顺序执行 Python代码在执行过程中,遵循下面的基本原则: 普通语句 ...
- Python学习笔记011
多行注释 '''字符串 ''' 除了用来多行注释还可以用来打印多行
- ApacheDbUtilsTest
ApacheDbUtilsTest package p1; import com.DataSourceUtil; import entity.Student; import org.apache.co ...
- linux用户权限、系统信息相关命令(待学)
用户权限相关命令 目标 用户 和 权限 的基本概念 用户管理 终端命令 组管理 终端命令 修改权限 终端命令 01.用户和权限的基本概念 1.1 基本概念 用户 是Linux系统工作中重要的一环, 用 ...
- 利用Session实现三天免登陆
什么是Session Session:在计算机中,尤其是在网络应用中,称为“会话控制”.(百度百科) Session:服务器端的数据存储技术. Session要解决什么问题 一个用户的不同请求(重定位 ...
- redis 之redis发布订阅
Redis 通过 PUBLISH . SUBSCRIBE 等命令实现了订阅与发布模式. 一个Publisher,多个Subscriber模型 如下图所示,可以作为消息队列或者消息通道 主要应用: 一个 ...
- 无线冲方案 MCU vs SoC
参考: MCU还是SoC:2018无线充电技术走向何方? 方案 分立/集成 特点 框图 MCU方案 分立方案 MCU芯片负责Qi协议的运算和外围电路控制,ST MCU居多:单线圈,双线圈,三线圈都有: ...
- 使MVC路由表无效
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(Glob ...
- antd组件实现上传证书
- redis之常见操作
目录 redis的常见操作 1. redis客户端登录方式 2. 设置密码 3. 获取redis的配置 4. redis键(key) 语法 实例 Redis keys (黄色为重点) redis的常见 ...