状态压缩DP SRM 667 Div1 250
2015-09-12 19:17
288 查看
题意:给n个01串,设计一种顺序,使得每次新出现的1的个数^2和最小
分析:比赛时不知道是div1的题,以为暴力贪心可以过,结果被hack掉了。题解说没有充分的证明使用贪心是很有风险的,正解是用状态压缩DP,详细解释。
收获:爆零还能涨分,TC真奇怪。
代码:
分析:比赛时不知道是div1的题,以为暴力贪心可以过,结果被hack掉了。题解说没有充分的证明使用贪心是很有风险的,正解是用状态压缩DP,详细解释。
收获:爆零还能涨分,TC真奇怪。
代码:
int dp[(1<<20)+10]; int a[55]; class OrderOfOperations { public: int minTime( vector <string> s ) { int n = s.size (), m = s[0].length (); memset (a, 0, sizeof (a)); int tot = 0; for (int i=0; i<n; ++i) { for (int j=0; j<m; ++j) { if (s[i][j] == '1') a[i] |= (1<<j); } tot |= a[i]; } memset (dp, INF, sizeof (dp)); dp[0] = 0; for (int i=0; i<(1<<m); ++i) { for (int j=0; j<n; ++j) { int x = i | a[j]; //从i状态转移到x的状态 int y = x - i; //表示新出现的1 int k = __builtin_popcount (y); //内置函数,快速得到二进制下1的个数 dp[x] = min (dp[x], dp[i] + k * k); //类似Bellman_Ford } } return dp[tot]; } };
相关文章推荐
- JAVA学习路线图---(JAVA1234)
- Java Web --- HelloWorld!
- 使用JavaScript检测浏览器
- Android(java)学习笔记236:多媒体之加载大图片到内存(Bitmap API)
- javascript高级程序设计---Event对象三
- 如何编写sql
- java集合类
- C++_简单的链表栈
- PS AD命令系列 之new-adcomputer命令!
- 一个可以列出你所有博文浏览量的程序
- 19个必须知道的Visual Studio快捷键
- 杭电OJ 1671解题报告(字典树模板)
- PhoneGap创建Android项目并使用eclipse打开
- JAVA字符集
- mysql 在创建批处理脚本日志表信息
- 又一次质的飞跃——致2015年终总结
- python简单小记
- 汇编
- 相邻数对
- 寻找中位数(分治+双堆)