博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ3471--Most Powerful(状压DP)
阅读量:4591 次
发布时间:2019-06-09

本文共 1324 字,大约阅读时间需要 4 分钟。

有n(n<10)个小球,每两个碰撞有其中一个会消失,并产生一定能量。求产生最大能量。

有了正确思路题目比较简单,我的思路果然是歪的。。。

 

我的思路是dp[i][j]表示i这个状态剩下第j个小球,然后转移方程:

dp[j|(1<

感觉没什么问题,但是WA了好多好多次呢!

知道自己怎么错的是个大事。。。。。。。。。

因为这样每次都是用碰撞过的小球来碰撞,但是其实比如有四个小球 1和2碰撞 3和4碰撞 然后剩下的两个在碰撞,这样的情况更新不到。

 

副ac代码吧,写的也很挫。。。

#include 
#include
using namespace std;const int N = 11;const int MAXN = 1 << N;int dp[MAXN];int power[N][N];int main(){ int n; while (cin >> n && n) { for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { cin >> power[i][j]; } } int st = (1 << n) - 1; memset(dp, 0, sizeof dp); for (int s = 0; s <= st; ++s) { for (int i = 0; i < n; ++i) { if (((1 << i) & s) == 0) for (int j = 0; j < n; ++j) { if (((1 << j) & s) == 0) { if (i != j) { dp[s | (1 << i)] = max(dp[s | (1 << i)], dp[s] + power[j][i]); } } } } } int ans = 0; for (int s = 0; s <= st; ++s) ans = max(ans, dp[s]); cout << ans << endl; }}

  

转载于:https://www.cnblogs.com/wenruo/p/4981730.html

你可能感兴趣的文章
距离咨询
查看>>
[css]画圆形标签
查看>>
mysql中常用的数据类型02
查看>>
gmock学习一 转载
查看>>
留言板
查看>>
点餐系统的设计与实现注意点与解决办法
查看>>
Java的基本类型
查看>>
POJ 3352 Road Construction(图论-tarjan)
查看>>
JS 强制类型转化
查看>>
Note:JSON
查看>>
Design Pattern ->Bridge
查看>>
ModelAndView返回mav时,报404
查看>>
spring配置xml的错误
查看>>
资金归集率比率sql
查看>>
JavaScript常用字符串操作方法总结
查看>>
LinkedList、ArrayList各自的使用场景,如何确认应该用哪一个?
查看>>
java 并发——内置锁
查看>>
微信小程序实现各种特效实例
查看>>
JAVA编程思想读书笔记(三)--RTTI
查看>>
[洛谷P3931]SAC E#1 - 一道难题 Tree
查看>>