HRBUST 1473 教主的遗产【状态压缩】
Description |
恭送教主! 教主在2012年7月19日上午10:48,坐上前往北京的火车,从此开始了高富帅的生活。
在教主的的大学四年ACM生涯中,他用事实告诉我们,要想在比赛拿奖,除了平时的刻苦努力外,很大一部分还要依赖比赛时是
做题策略,简单来讲就是做题顺序,唯有想把能过的都过掉,然后再过难题,这样才能在比赛中拿奖。
我们将用这个做题顺序量化表示,即AC系数,AC系数越大,拿奖可能性就越大。
在比赛中会给出n个题,不同做题顺序会有不同的AC系数,假如A先做,B后做的话,B对A的AC系数为4, 反过来 B先做,A后做的话,A对B的AC系数为5,说明先做B后做A将得到更高的AC系数。
设Sij表示第i题在第j题做完后才做获得的AC系数,有三道题a, b, c,做题顺序为bac,则系数和为:Sum = Sab + Scb + Sca。
求一个做题顺序,使得AC系数和最大。
|
Input |
有多组测试数据。
对于每组测试数据,第一行为n(1<=n<=16),表示题目数量。
接下来有n行,每行n个数字,对于1+i行的第j个数字Sij(0 <= Sij <= 32), 表示第i题在第j题之后做的AC系数。
|
Output |
每组测试数据输出一行,包含一个数,为最大系数和。 |
Sample Input |
1 0 2 0 2 4 0 3 0 2 4 4 0 25 17 15 0 |
Sample Output |
0 4 46 |
解题思路:例如做题顺序为abcd时sum=sba+sca+sda+scb+sdb+sdc;而不是sum=sba+scb+sdc+sda;
dp[i][state]:表示state集合里最后做i题的得分,i属于state
map[N][N]:保存题意的原图
f[i][state]:表示i不在state集合,最后做i题得分
那么状态转移方程为:状态转移方程dp[i][state]=max(dp[k][state-i])+f[i][state];
代码如下:
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; #define N 17 #define M 1<<17 int dp[N][M], map[N][N], f[N][M]; int main() {int i, j, k, n, state, newstate, sum;while(scanf("%d", &n)!=EOF){if(n==0)break;memset(map, 0, sizeof(map));memset(f, 0, sizeof(f));memset(dp, 0, sizeof(dp)); sum=(1<<n); for(i=0; i<n; i++){for(j=0; j<n; j++){scanf("%d", &map[i][j]);}}for(state=0; state<sum; state++){for(i=0; i<n; i++){if(state&(1<<i))continue;for(j=0; j<n; j++){if(state&(1<<j)) f[i][state]+=map[i][j];}}}for(state=0; state<sum; state++){for(i=0; i<n; i++){if(state&(1<<i))continue;int maxnum=0; for(k=0; k<n; k++){if(state&(1<<k)) maxnum=max(maxnum, dp[k][state]);} for(k=0; k<n; k++){if((state&(1<<k)))continue; int newstate=state+(1<<k);dp[i][newstate]=max(dp[i][newstate], maxnum+f[i][state]);}}}int maxnum=0;for(i=0; i<n; i++){maxnum=max(maxnum, dp[i][sum-1]);} printf("%d\n", maxnum);} }
转载于:https://www.cnblogs.com/Hilda/archive/2012/09/07/2674527.html
HRBUST 1473 教主的遗产【状态压缩】相关推荐
- pat 食物链(状态压缩求哈密顿回路)
状态压缩求哈密顿回路 #include<bits/stdc++.h> using namespace std; bool dp[23][1<<21]; char s[22][2 ...
- POJ-1753 Flip Game 枚举 状态压缩
刚开始做这题时总是在想应该用何种的策略来进行翻装,最后还是没有想出来--- 这题过的代码的思路是用在考虑到每个点被翻装的次数只有0次或者是1次,所以对于16个点就只有2^16中请况了.再运用位运算将状 ...
- 状压DP Hiho-1044 状态压缩
状态压缩 [HihoCoder - 1044] 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前往下一座城市--那座城市即将举行美食节! 但是不幸的是,小 ...
- POJ-1185 炮兵阵地 动态规划+状态压缩
由于递推的时候依赖于三个连续层的关系.一开始想着直接三重for循环,但是这里有个问题就是上一层的0位置上包括着上上层是0和1两种可能,而后者又对当前行有约束,因此该方法不行.当然有一个办法就是增加状态 ...
- 树上启动式合并问题 ---- D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths [状态压缩+树上启发式合并]
题目链接 题目大意: 一棵根为1 的树,每条边上有一个字符(a−va−va−v共22种). 一条简单路径被称为Dokhtar−kosh当且仅当路径上的字符经过重新排序后可以变成一个回文串. 求每个子树 ...
- 点分治问题 ----------- HDU 5977 or 2016年大连ICPC [点分治+状态压缩]
题目链接 题目大意: 就是给你一颗树,树上有各种权值,权值只有K种k∈[1,10]K种k\in[1,10]K种k∈[1,10],问你有多少路径覆盖了这KKK种权值,n∈[1,5e4]n\in[1,5e ...
- 0x56. 动态规划 - 状态压缩DP(习题详解 × 7)
目录 Problem A. 最短Hamilton路径 ProblemB. 蒙德里安的梦想 Problem C. Corn Fields Problem D. 小国王 Problem E. 炮兵阵地 P ...
- 解题报告(一)D、(CROC 2016 - Final Round C)Binary Table(矩阵 + 状态压缩 + FWT)(3.5)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 【动态规划】状态压缩动态规划
整理的算法模板合集: ACM模板 目录 一.集合类状态压缩动态规划 A. AcWing 91. 最短Hamilton路径 B.AcWing 524. 愤怒的小鸟 二.连通类(棋盘类)状态压缩动态规划 ...
最新文章
- c#调用excel报错 (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT))问题的解决
- golang mysql 基本操作
- eplan导出部件汇总表_干货分享:西门子产品数据表导入到博途和EPLAN应用举例...
- 产品规划,要考虑哪些方面?
- ion-nav-view的学习 和理解
- 王道操作系统考研笔记——2.2.0 交互式系统调度算法
- linux从新手到高手,1.3 养成良好的Linux操作习惯免费阅读_循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用免费全文_百度阅读...
- 错误:在keystone中无法找到默认角色user_Kubernetes RBAC角色权限控制
- 在线进行 PCoA 分析和相关统计检验
- 13、字符设备驱动的使用
- 社区实施 GPL 的原则介绍
- R语言ETL工程:插入与合并(add/bind)
- 寒冬之下,被cai的那些人到底去哪了?
- Servlet做Controller,实现一个类处理多个请求
- kepware rest服务器_指南安全的KEPServerEX部署-Kepware.PDF
- react-custom-scrollbars 滚动条组件的简单实现
- python eof是什么_EOF错误python
- android动态壁纸的制作教程,巧用Windows自带工具,简易制作动态壁纸教程
- 关于Fabric中shim包的问题
- not discrete but [0, 1]. Specify a discrete sample time in
热门文章
- 易乐游无盘服务器缓存设置,易乐游缓存设置图文教程
- libvirt热迁移报Connection refused错误解决办法
- Kafka概念和基本架构概述
- solr-4.10.3.tgz.tgz下载
- 刷前端面经笔记(九)
- 行云管家 V4.7产品新特性-国际化版本、支持Oracle的数据库审计、主机密码自动修改策略 发布日期:2018-11-22...
- AbstractQueuedSynchronizer 源码分析(共享锁)
- OpenJDK与JDK的区别分析
- 在Ubuntu 14.04上安装 Webmin
- DevExpress GridControl Gridview RepositoryItemCheckEdit复选框及获取选择行数据