HDU 5045 状压DP 上海网赛
2024-10-08 14:43:20
比赛的时候想的是把n个n个的题目进行状压 但这样不能讲究顺序,当时精神面貌也不好,真是挫死了
其实此题的另一个角度就是一个n个数的排列,如果我对n个人进行状压,外面套一个按题目循序渐进的大循环,那么,在当前做第i个题目,前i-1个题目已经做完,然后做完的人的状态为j, j可能是1110 1101 1011什么的(假设已经做了三道题),因为我这样就可以只管状态而不管顺序了,我只取这种状态下的最大值,他究竟是怎么个顺序排列我不用管
到此。。。好像问题就没有什么问题了,这种做法重复 m/n次最后把剩余的再跑一下就可以了,因为每次考虑第i个题的时候 只和i-1有关,则用个滚动数组即可,比较麻烦的是每次要清空,只能说空间和时间不可兼得啊
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
double A[][];
int n,m;
double dp[][<<];
int main()
{
int t,kase=;
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&m);
for (int i=;i<n;i++){
for (int j=;j<m;j++) scanf("%lf",&A[i][j]);
}
int ALL=<<n;
for (int i=;i<=ALL;i++){
dp[][i]=dp[][i]=;
}
for (int i=;i<n;i++){
dp[][<<i]=A[i][];
}
int p=;
double ans=;
for (int i=;i<m;i++){
p^=;
for (int j=;j<=ALL;j++) dp[p][j]=;
for (int j=;j<ALL;j++){
if (dp[p^][j]==) continue;
for (int k=;k<n;k++){
if ((<<k)&j) continue;
int nt=(<<k)|j;
if (nt==ALL-) nt=;
dp[p][nt]=max(dp[p][nt],dp[p^][j]+A[k][i]);
if (i==m-) ans=max(ans,dp[p][nt]);
}
}
} printf("Case #%d: %.5lf\n",++kase,ans);
}
}
最新文章
- CS0103: The name ‘Scripts’ does not exist in the current context解决方法
- IOS 手势-轻点、触摸、手势、事件
- EntityFramework动态多条件查询与Lambda表达式树
- Python操作文件文档
- CityGML文件格式
- malloc、calloc、realloc的区别
- HDU1540 Tunnel Warfare 水题
- 用Python实现的一个简单的随机生成器
- Oracle PL/SQL 非预定义异常、自定义异常处理、RAISE_APPLICATION_ERROR
- LightOJ 1095 Arrange the Numbers-容斥
- 【HDFS API编程】第一个应用程序的开发-创建文件夹
- Retrofit2 原理解析
- MySql中drop、truncate、delete的区别
- 用C#创建一个窗体,在构造函数里面写代码和在from_load事件里面写代码有什么不同?
- 使用QFileDiaglog实战designer快速开发
- CH0101 a^b、 CH0102 64位整数乘法(快速幂、快速乘)【模板题】
- Grid Virtual Server 和 网格计算
- 使用maven-shade-plugin插件解决spark依赖冲突问题
- HDU 3829
- Hbase—学习笔记(一)
热门文章
- Python学习第二十一课——Mysql 对数据库的基本操作
- Jquery 事件 文本框常用
- [WC2018]通道(乱搞,迭代)
- [ DLPytorch ] 循环神经网络进阶&;拟合问题&;梯度消失与爆炸
- kafka start bat
- Sqoop 一点通
- Centos 下安装php
- Plastic Sprayers Manufacturer - Spray Principle, Spray Note
- 后台框架 FastAdmin V1.0.0.20200228 发布,为疫情防控作贡献
- Css——显示2行数据,超出显示...