状态压缩dp zoj3802
做这个题的时候看了看时间复杂度觉得应该是个贪心或者dp,然后贪心又很快被否定了,因为不具备贪心的一些特性,想了想觉得没什么思路。看了下网上的思路,真是让人拍案叫绝,算法的魅力就在于此啊。。
首先dp就意味着要寻找一些状态,我觉得500的状态太多了根本无从保存啊。网上的思路说难也不难,就是只保存下降的序列,因为能合并的只有下降的序列,上一个状态能够传递到下面的有不要当前,合并,当前值比递降序列最小的还小就归并,否则地将序列变成a[i];
我一下就明白了然后开始敲,TE!
各种优化
找能否合并由暴力找最小值变成j&(a[i]-1) TE
输入数所有除以2输出乘2这又减了一半时间复杂度 还是TE
气的我肝都疼了 看了看网上代码,用的滚动数组,哦。。。的确比我傻傻的用[500][8*500]少了250倍,改了改wa掉了我qu
于是我按照输入可能有一处理了一下ac!好开心~
代码如下
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
const int maxa = ;
int dp[][*maxa];
int a[maxa];
int main(){
int t;
//freopen("in.cpp", "r", stdin);
int n;
scanf("%d", &t);
while(t--){
scanf("%d", &n);
int sum = ;
for(int i = ; i <= n ; i++){
scanf("%d", &a[i]);
a[i]/=;
sum += a[i];
}
memset(dp, -, sizeof(dp));
dp[][] = ;
for(int g = ; g <= n; g++){
int I = g%;
int II = (g+)%;
for(int j = ; j <= sum; j++){
if(dp[II][j]!=-){
dp[I][j] = max(dp[I][j],dp[II][j]);
if((a[g] -)&j){
dp[I][a[g]] = max(dp[I][a[g]], dp[II][j]+a[g]);
}else{
int mm = a[g];
int k = ;
int oo = a[g];
while(oo & j){
mm += oo*;
oo*=;
}//printf("%d %d\n", i, j, dp[i][]);
dp[I][j+a[g]] = max(dp[I][j+a[g]], dp[II][j] + mm);
}
}
}
}
int maxn = ;
for(int i = ; i <= sum ;i++){
maxn = max(maxn, dp[(n)%][i]);
}
printf("%d\n", *maxn);
}
}
状态压缩dp zoj3802的更多相关文章
- hoj2662 状态压缩dp
Pieces Assignment My Tags (Edit) Source : zhouguyue Time limit : 1 sec Memory limit : 64 M S ...
- POJ 3254 Corn Fields(状态压缩DP)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4739 Accepted: 2506 Descr ...
- [知识点]状态压缩DP
// 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...
- HDU-4529 郑厂长系列故事——N骑士问题 状态压缩DP
题意:给定一个合法的八皇后棋盘,现在给定1-10个骑士,问这些骑士不能够相互攻击的拜访方式有多少种. 分析:一开始想着搜索写,发现该题和八皇后不同,八皇后每一行只能够摆放一个棋子,因此搜索收敛的很快, ...
- DP大作战—状态压缩dp
题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...
- 状态压缩dp问题
问题:Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Ev ...
- BZOJ-1226 学校食堂Dining 状态压缩DP
1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec Memory Limit: 259 MB Submit: 588 Solved: 360 [Submit][ ...
- Marriage Ceremonies(状态压缩dp)
Marriage Ceremonies Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu ...
- HDU 1074 (状态压缩DP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:有N个作业(N<=15),每个作业需耗时,有一个截止期限.超期多少天就要扣多少 ...
随机推荐
- Android Init进程命令的执行和服务的启动
这里开始分析init进程中配置文件的解析,在配置文件中的命令的执行和服务的启动. 首先init是一个可执行文件,它的对应的Makfile是init/Android.mk. Android.mk定义了i ...
- 客户端是选择Java Swing还是C# Winform
登录|注册 mentat的专栏 目录视图 摘要视图 订阅 [专家问答]韦玮:Python基础编程实战专题 [知识库]Swift资源大集合 [公告]博客新皮肤上线啦 ...
- swift代码排版-参考
代码排版包括: 空行.空格.断行和缩进等内容.代码排版内容比较多工作量很多,但是非常重要. 空行 空行将逻辑相关的代码段分隔开,以提高可读性.下列情况应该总是添加空行: 类型声明之前. import语 ...
- C语言整数按照二进制逆序,输出逆序后的整数值
问题来源,今天早上和一舍友吃早餐的时候谈到的一个问题,将一个整数按照二进制逆序,然后输出逆序后的数值. 我们知道数值在内存中都是以二进制的形式存放的,假如我们是32位机,每8位为一个字节,int型在3 ...
- 摇滚吧HTML5!有声前端交互!(Hello, Jsonic!)
软件工程师们摆弄1和0编写他们的乌托邦,音乐人门把玩12平均律上的音符构筑他们的伊甸园.最近,我偶然看了<蓝色骨头>这部电影,片中的男主角是位黑客,同时又兼具音乐创作的才华.在现实生活中, ...
- hive 三种启动方式及用途,关注通过jdbc连接的启动
http://blog.csdn.net/a221133/article/details/6734746
- Ruby on Rails Tutorial读书笔记-1
只是怕忘了命令,全部撸一次,记个大概.. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 安装Ruby之前,先要安装RVM: curl -L https://get.rvm.io | bas ...
- Altium Designer 14(或者其他版本)里更改PCB板(图纸)大小
1.在PCB板界面下方有一行不同颜色的图层选项,找到“Keep-Out Layer”,没看见的话点击右箭头即可找到. 2.在“Place”选项里面选择“line”,也就是添加线,把你所有元件用线条 ...
- Powershell错误处理,try catch finally
脚本的调试向来是一个艰巨的任务,在powershell出现以前简直是一场灾难.在powershell中微软终于做出了诸多改进,不但有了$Error.-whatif,也有了ISE.而在语法上也增加了tr ...
- word-wrap: break-word 和 word-break: break-all 到底有啥区别?
做项目改bug的时候,遇到过好多次,要么是文本超出文本区域,或者单词太长(一般是url链接中的一些鬼),把装它的标签强制撑大,导致一些响应式问题.除此之外,还有很多问题,每次都是恍然醒悟,然后又在网上 ...