状态压缩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),每个作业需耗时,有一个截止期限.超期多少天就要扣多少 ...
随机推荐
- CentOS下php使用127.0.0.1不能连接mysql的解决方法
这篇文章主要介绍了CentOS下php使用127.0.0.1不能连接mysql的解决方法,本文原因是SELINUX导致的连接失败,需要的朋友可以参考下 php代码很简单: 复制代码代码如下: $ser ...
- 图的建立——邻接表表示(C语言+VC6.0平台)
图是一种重要而且相对复杂的数据结构,在实际编程中非常有用.邻接表是图的主要表示形式之一,是一种链接表表示方法. #include<stdio.h> #include<stdlib.h ...
- d008: 求两数的整数商 和 商
内容: 求两数的整数商 和 商 ,商保留两位小数 输入说明: 一行 两个整数 输出说明: 一行,一个整数,一个实数(两位小数) 输入样例: 12 8 输出样例 : 1 1.50 #include ...
- 用异提交时,后台通过校验规则文件,校验不通过时,跳转到INPUT视图时,前台显示错误信息的解决办法
1.第一种: 最近项目使用了struts2的校验(其实我觉得后台校验,特别是struts的校验,完全可以放在其他地方处理,比如交给js或者业务逻辑),而且系统刚好还使用了extjs,此时问题出现了:假 ...
- Sicily connect components in undirected graph
题目介绍: 输入一个简单无向图,求出图中连通块的数目. Input 输入的第一行包含两个整数n和m,n是图的顶点数,m是边数.1<=n<=1000,0<=m<=10000. 以 ...
- Ubuntu12.04 下安装Chrome浏览器
第一步 下载. 32位:https://dl.google.com/linux/direct/google-chrome-stable_current_i386.deb 64位:https://dl. ...
- jQueryMobile之listview
效果如下: data-inset="true":为圆角 data-filter="true":带着过滤输入框 <!DOCTYPE html> < ...
- DOCKER脚本一例---快速建立大批测试机
这个会由一系列的脚本构成,比如: 系统重启后,如何快速恢复服务,如何建立网桥(也可一次写入),如何在新系统上快速部署. ADDBRIDGE #!/bin/sh br_name=br100 brctl ...
- 【转】Java多线程操作局部变量与全局变量
原文网址:http://blog.csdn.net/undoner/article/details/12849661 在这篇文章里,我们首先阐述什么是同步,不同步有什么问题,然后讨论可以采取哪些措施控 ...
- linux下so动态库一些不为人知的秘密
linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名.二者都使用广泛.本文主要讲动态库方面知识. 基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些 ...