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];

代码如下:

View Code

#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 教主的遗产【状态压缩】相关推荐

  1. pat 食物链(状态压缩求哈密顿回路)

    状态压缩求哈密顿回路 #include<bits/stdc++.h> using namespace std; bool dp[23][1<<21]; char s[22][2 ...

  2. POJ-1753 Flip Game 枚举 状态压缩

    刚开始做这题时总是在想应该用何种的策略来进行翻装,最后还是没有想出来--- 这题过的代码的思路是用在考虑到每个点被翻装的次数只有0次或者是1次,所以对于16个点就只有2^16中请况了.再运用位运算将状 ...

  3. 状压DP Hiho-1044 状态压缩

    状态压缩 [HihoCoder - 1044] 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前往下一座城市--那座城市即将举行美食节! 但是不幸的是,小 ...

  4. POJ-1185 炮兵阵地 动态规划+状态压缩

    由于递推的时候依赖于三个连续层的关系.一开始想着直接三重for循环,但是这里有个问题就是上一层的0位置上包括着上上层是0和1两种可能,而后者又对当前行有约束,因此该方法不行.当然有一个办法就是增加状态 ...

  5. 树上启动式合并问题 ---- D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths [状态压缩+树上启发式合并]

    题目链接 题目大意: 一棵根为1 的树,每条边上有一个字符(a−va−va−v共22种). 一条简单路径被称为Dokhtar−kosh当且仅当路径上的字符经过重新排序后可以变成一个回文串. 求每个子树 ...

  6. 点分治问题 ----------- 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 ...

  7. 0x56. 动态规划 - 状态压缩DP(习题详解 × 7)

    目录 Problem A. 最短Hamilton路径 ProblemB. 蒙德里安的梦想 Problem C. Corn Fields Problem D. 小国王 Problem E. 炮兵阵地 P ...

  8. 解题报告(一)D、(CROC 2016 - Final Round C)Binary Table(矩阵 + 状态压缩 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  9. 【动态规划】状态压缩动态规划

    整理的算法模板合集: ACM模板 目录 一.集合类状态压缩动态规划 A. AcWing 91. 最短Hamilton路径 B.AcWing 524. 愤怒的小鸟 二.连通类(棋盘类)状态压缩动态规划 ...

最新文章

  1. c#调用excel报错 (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT))问题的解决
  2. golang mysql 基本操作
  3. eplan导出部件汇总表_干货分享:西门子产品数据表导入到博途和EPLAN应用举例...
  4. 产品规划,要考虑哪些方面?
  5. ion-nav-view的学习 和理解
  6. 王道操作系统考研笔记——2.2.0 交互式系统调度算法
  7. linux从新手到高手,1.3 养成良好的Linux操作习惯免费阅读_循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用免费全文_百度阅读...
  8. 错误:在keystone中无法找到默认角色user_Kubernetes RBAC角色权限控制
  9. 在线进行 PCoA 分析和相关统计检验
  10. 13、字符设备驱动的使用
  11. 社区实施 GPL 的原则介绍
  12. R语言ETL工程:插入与合并(add/bind)
  13. 寒冬之下,被cai的那些人到底去哪了?
  14. Servlet做Controller,实现一个类处理多个请求
  15. kepware rest服务器_指南安全的KEPServerEX部署-Kepware.PDF
  16. react-custom-scrollbars 滚动条组件的简单实现
  17. python eof是什么_EOF错误python
  18. android动态壁纸的制作教程,巧用Windows自带工具,简易制作动态壁纸教程
  19. 关于Fabric中shim包的问题
  20. not discrete but [0, 1]. Specify a discrete sample time in

热门文章

  1. 易乐游无盘服务器缓存设置,易乐游缓存设置图文教程
  2. libvirt热迁移报Connection refused错误解决办法
  3. Kafka概念和基本架构概述
  4. solr-4.10.3.tgz.tgz下载
  5. 刷前端面经笔记(九)
  6. 行云管家 V4.7产品新特性-国际化版本、支持Oracle的数据库审计、主机密码自动修改策略 发布日期:2018-11-22...
  7. AbstractQueuedSynchronizer 源码分析(共享锁)
  8. OpenJDK与JDK的区别分析
  9. 在Ubuntu 14.04上安装 Webmin
  10. DevExpress GridControl Gridview RepositoryItemCheckEdit复选框及获取选择行数据