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的更多相关文章

  1. ZOJ 3802 Easy 2048 Again 像缩进DP

    链接:problemId=5334">http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5334 题意:一个长度为5 ...

  2. 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 ...

  3. ZOJ3802 Easy 2048 Again (状压DP)

    ZOJ Monthly, August 2014 E题 ZOJ月赛 2014年8月 E题 http://acm.zju.edu.cn/onlinejudge/showProblem.do?proble ...

  4. [ZOJ 3662] Math Magic (动态规划+状态压缩)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3662 之前写过这道题,结果被康神吐槽说代码写的挫. 的确,那时候 ...

  5. hdu 4614 pieces 状态DP

    题意:给你一个长度小于等于16的字符串,每次可以删除一个回文传,问你最少删除干净的字数. 状态+dp dp[i] = min(dp[i],dp[j]+dp[j^i]);(j是i的字串): 连接:htt ...

  6. hdu 4778 Gems Fight! 博弈+状态dp+搜索

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4102743.html 题目链接:hdu 4778 Gems Fight! 博弈+状态dp+搜 ...

  7. POJ 3254 压缩状态DP

    题意:一个矩形网格,可以填0或1, 但有些位置什么数都不能填,要求相邻两个不同时为1,有多少种填法.矩形大小最大 12*12. 压缩状态DP大多有一个可行的state的范围,先求出这个state范围, ...

  8. 【状态DP】 HDU 1074 Doing Homework

    原题直通车:HDU  1074  Doing Homework 题意:有n门功课需要完成,每一门功课都有时间期限t.完成需要的时间d,如果完成的时间走出时间限制,就会被减 (d-t)个学分.问:按怎样 ...

  9. Hdu 4539 【状态DP】.cpp

    题意: 一个炮兵可以攻打和他之间曼哈顿距离为2的士兵,给出你一块n*m的战场,告诉你哪些地方可以站人哪些地方不可以,问你最多可以安放多少个士兵? n <= 100, m <= 10 思路: ...

随机推荐

  1. 吴裕雄--天生自然PythonDjangoWeb企业开发:需求

    开发或者做一个项目,是要有一个需求过来的,而不是无缘无故的,启动一个项目,或者推动整个项目进行下一步迭代.这个需求可能是根据用户反馈增加的,可能是老板提出来的,也有可能是产品经理提出来的,但是无论是什 ...

  2. Netcat - 网络工具中的瑞士军刀

    nc的一些小应用,慢更新.... 1.一个简单的聊天工具,Client1和Client2之间,Client1安装了nc,监听8888端口,Client2用telnet Client1的8888端口即可 ...

  3. 敏捷团队协作:Confluence简易教程

      0.Confluence简介 Confluence是一个企业级的Wiki软件,可用于在企业.部门.团队内部进行信息共享和协同编辑. 1.基础概念 Confluence的使用并不复杂,只需掌握如下几 ...

  4. linux 部署java 项目命令

    1:服务器部署路径:/home/tomcat/tomcat/webapps  (用FTP工具链接服务器把包上传到此目录) 2:进入项目文件夹 cd /home/tomcat/tomcat/webapp ...

  5. 2020牛客寒假算法基础集训营4 J 二维跑步

    https://ac.nowcoder.com/acm/contest/view-submission?submissionId=43035417 假设有i步选择不动,就有n-i步移动 假设其中又有a ...

  6. 计算xx年xx月xx日是星期几

    代码: #include <iostream> #include <string> #include <vector> using namespace std; i ...

  7. 在win10中启动redis

    1.输入命令"redis-server.exe redis.windows.conf ",按回车键, 2.输入“redis-cli.exe -h 127.0.0.1 -p 6379 ...

  8. Py西游攻关之基础数据类型(五)-集合

    Py西游攻关之基础数据类型 - Yuan先生 https://www.cnblogs.com/yuanchenqi/articles/5782764.html 八 集合(set) 集合是一个无序的,不 ...

  9. Redis有序集合类型

    命令 增加元素 ZADD score member [score member ...] > ZADD scoreboard 89 Tom 76 Peter 100 David (integer ...

  10. C#学习之time控件和timer_tick事件 -----转载

    Timer控件:Timer控件只有绑定了Tick事件,和设置Enabled=True后才会自动计时,停止计时可以用Stop()控制,通过Stop()停止之后,如果想重新计时,可以用Start()方法来 ...