做这个题的时候看了看时间复杂度觉得应该是个贪心或者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的更多相关文章

  1. hoj2662 状态压缩dp

    Pieces Assignment My Tags   (Edit)   Source : zhouguyue   Time limit : 1 sec   Memory limit : 64 M S ...

  2. POJ 3254 Corn Fields(状态压缩DP)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4739   Accepted: 2506 Descr ...

  3. [知识点]状态压缩DP

    // 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...

  4. HDU-4529 郑厂长系列故事——N骑士问题 状态压缩DP

    题意:给定一个合法的八皇后棋盘,现在给定1-10个骑士,问这些骑士不能够相互攻击的拜访方式有多少种. 分析:一开始想着搜索写,发现该题和八皇后不同,八皇后每一行只能够摆放一个棋子,因此搜索收敛的很快, ...

  5. DP大作战—状态压缩dp

    题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...

  6. 状态压缩dp问题

    问题:Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Ev ...

  7. BZOJ-1226 学校食堂Dining 状态压缩DP

    1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec Memory Limit: 259 MB Submit: 588 Solved: 360 [Submit][ ...

  8. Marriage Ceremonies(状态压缩dp)

     Marriage Ceremonies Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu ...

  9. HDU 1074 (状态压缩DP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:有N个作业(N<=15),每个作业需耗时,有一个截止期限.超期多少天就要扣多少 ...

随机推荐

  1. 一个php小白找工作的历程

    一个php小白找工作的历程其实对新工作还是有点忐忑的,对于我这样一个有着特殊工作经历的来说更是如此.为了更好的迎接未来,不得不总结下过去.在经历一段时间的职业生涯探索期后,还是觉得自己更适合做程序员这 ...

  2. oracle创建主键序列和在ibatis中应用

    oracle创建主键序列 oracle主键序列的查询和ibitas中应用

  3. ASP.NET MVC下的异步Action的定义和执行原理

    一.基于线程池的请求处理ASP.NET通过线程池的机制处理并发的HTTP请求.一个Web应用内部维护着一个线程池,当探测到抵达的针对本应用的请求时,会从池中获取一个空闲的线程来处理该请求.当处理完毕, ...

  4. 郝斌老师C语言学习笔记(一)

    在给变量分配内存时,很可能这段内存存在以前其他程序使用留下的值.当使用VC编译器,若编译器发现没有给变量赋值而使用,就会返回一个以“85”开头的很大的数字(此时该段内存中为一个垃圾数,为了避免出现较常 ...

  5. Android菜单详解(一)——理解android中的Menu

    前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至 ...

  6. 【HDOJ】1080 Human Gene Functions

    DP.wa了一下午,原来是把mmax写在外层循环了.最近事情太多了,刷题根本没状态. #include <cstdio> #include <cstring> #include ...

  7. 百度搜索URL参数 搜索关键字

    http://www.baidu.com/s?wd=关键字 wd(Keyword):查询的关键词: http://www.baidu.com/s?wd=关键字&cl=3 cl(Class):搜 ...

  8. 多线程面试题(Google)

    有四个线程1.2.3.4.线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD.初始都为空.现要让四个文件呈如下格式: A:1 2 3 4 1 2.... ...

  9. 基于 canvas 将图片转化成字符画

    字符画大家一定非常熟悉了,那么如何把一张现有的图片转成字符画呢? HTML5 让这个可能变成了现实,通过 canvas,可以很轻松实现这个功能. 其实原理很简单:扫描图片相应位置的像素点,再计算出其灰 ...

  10. (转)iOS keychain API及其封装

    一. Keychain API KeyChain中item的结构为: 1.增加keychain Item OSStatus SecItemAdd (CFDictionaryRef attributes ...