ZOJ 3471 Most Powerful(DP + 状态压缩)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4257
题目大意:有 n(2<=n<=10) 个原子,每两个原子(假设为i、j)碰撞会导致一个原子(假设为 j)消失,并产生巨大的能量(假设为 A[i][j]),现在给你所有的 A[i][j],问能够产生的最大能量是多少
Sample Input
2
0 4
1 0
3
0 20 1
12 0 1
1 10 0
0
Sample Output
4
22
分析:假设一个数,第i位表示第i个原子是否被灭掉,如果被灭掉则为1,没被灭掉为0,那么所有状态都可以用2^n范围内的数来表示。则初始状态为0,即所有原子都没有消失
令dp[i]表示达到状态 i 时所产生的最大能量,则答案就是从0~(1<<n)所有状态里释放的最大的那个能量。 需要枚举所有状态。
假设当前状态是s,从1~n里边枚举主动碰撞的原子 i ,和被动碰撞被消灭掉的原子 j ,则
dp[s | (1<<j)] = max{dp[s | (1<<j)] , dp[s] + A[i][j]};
代码如下:
# include<stdio.h>
# include<string.h>
const int N = (<<);
int A[][],dp[N]; int main(){
int n,i,j;
while(scanf("%d",&n) && n){
for(i=; i<n; i++)
for(j=; j<n; j++)
scanf("%d",&A[i][j]); memset(dp,,sizeof(dp)); int s;
int sum = (<<n);
for(s=; s<sum; s++) //遍历原子的所有状态
{
for(i=; i<n; i++) //枚举每一位,主动碰撞的原子
{
if(s & (<<i)) continue; //如果已经消失了,跳过看下一个原子
for(j=; j<n; j++)
{
if(s & (<<j)) continue;
if(i == j) continue; //找到一个被碰撞的原子
dp[s | (<<j)] = max(dp[s | (<<j)] , dp[s]+A[i][j]);
}
}
}
int ans=;
for(s =; s<sum; s++) ans = max(ans,dp[s]);
printf("%d\n",ans);
}
return ;
}
ZOJ 3471 Most Powerful(DP + 状态压缩)的更多相关文章
- zoj 3471 Most Powerful(状态压缩dp)
Recently, researchers on Mars have discovered N powerful atoms. All of them are different. These ato ...
- zoj 3471 Most Powerful
题目链接:zoj 3471 Most Powerful 作者:jostree 转载请说明出处 很经典的状态dp,使用i的二进制位表示粒子的状态,0表示存在,1表示不存在.dp[i]表示在状态i的情况 ...
- HDU 4336 Card Collector (期望DP+状态压缩 或者 状态压缩+容斥)
题意:有N(1<=N<=20)张卡片,每包中含有这些卡片的概率,每包至多一张卡片,可能没有卡片.求需要买多少包才能拿到所以的N张卡片,求次数的期望. 析:期望DP,是很容易看出来的,然后由 ...
- HDU 1074 Doing Homework (dp+状态压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:学生要完成各科作业, 给出各科老师给出交作业的期限和学生完成该科所需时间, 如果逾期一 ...
- hdu_4352_XHXJ's LIS(数位DP+状态压缩)
题目连接:hdu_4352_XHXJ's LIS 题意:这题花大篇篇幅来介绍电子科大的一个传奇学姐,最后几句话才是题意,这题意思就是给你一个LL范围内的区间,问你在这个区间内最长递增子序列长度恰为K的 ...
- hdu 4352 数位dp + 状态压缩
XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 【bzoj1076】[SCOI2008]奖励关 期望dp+状态压缩dp
题目描述 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再 ...
- hdu4336 Card Collector(概率DP,状态压缩)
In your childhood, do you crazy for collecting the beautiful cards in the snacks? They said that, fo ...
- dp状态压缩
dp状态压缩 动态规划本来就很抽象,状态的设定和状态的转移都不好把握,而状态压缩的动态规划解决的就是那种状态很多,不容易用一般的方法表示的动态规划问题,这个就更加的难于把握了.难点在于以下几个方面:状 ...
- 洛谷 1052 dp 状态压缩
洛谷1052 dp 状态压缩 传送门 (https://www.luogu.org/problem/show?pid=1052#sub) 做完这道题之后,感觉涨了好多见识,以前做的好多状压题目都是将一 ...
随机推荐
- NDK编译路径问题
有点偷懒,在一个使用了jni工程里面稍微修改一下,编译另外一个jni工程. 代码写完后,Android.mk等文件也写好,但是ndk-build的时候提示Android NDK:Your APP_BU ...
- java简单实现季节,性别分词处理
淘宝里面,每个宝贝都有一个标题,根据标题来分词,区分出季节和性别,分别写了两个方法,供大家参考. public int season(String str) { String dest = " ...
- SSIS执行SQL任务时加入参数
昨天开发的SSIS包中,获取ERP系统parttran表时,数据量比较大,达到255万多,因为SQL执行的关系,致使处理时效率很慢,所以就想用增量更新的方法处理该表数据.这是增量更新的SQL任务集合, ...
- S2 结业考试前改错汇总
1. PS:正确答案是A:枚举是值类型,一个类的对象是引用类型. 2. 每张表最多包含1个聚集索引.并且聚集索引会决定记录储存的物理位置.聚集索引不一定要建立在主键字段上.一张表可以没有任何索引. 3 ...
- 来试试这个来自静态代码分析工具PVS Studio提供C++的小测验吧
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:来试试这个来自静态代码分析工具PVS Studio提供C++的小测验吧.
- 《机器学习实战》——K近邻算法
三要素:距离度量.k值选择.分类决策 原理: (1) 输入点A,输入已知分类的数据集data (2) 求A与数据集中每个点的距离,归一化,并排序,选择距离最近的前K个点 (3) K个点进行投票,票数最 ...
- SOAP web service用AFNetWorking实现请求
问: This is my current call to (asmx) SOAP web service: NSString *soapMessage = [NSString stringWithF ...
- csdn博客又開始更新了
csdn博客经过两年多的沉寂又開始更新了,这两年偶尔在http://www.cnblogs.com/JerryWang1991/ 写一些博文,写的也比較少,如今工作一年多了,又開始回到csdn上更新. ...
- 从div盒子模型谈如何写可维护的css代码(转)
市面上我们常常会看到各种各样的设计模式书籍,Java设计模式.C#设计模式.Ruby设计模式等等.在众多的语言设计模式中我唯独找不到关于CSS设计模式的资料,即使在网上找到类似内容,细细一看之下才发觉 ...
- vector中的resize与 reserve
void reserve (size_type n); reserver函数用来给vector预分配存储区大小,即capacity的值 ,但是没有给这段内存进行初始化.reserve 的参数n是推荐预 ...