B - Problem Arrangement ZOJ - 3777
2024-09-04 05:03:00
Problem Arrangement ZOJ - 3777
题目大意:有n道题,第i道题第j个做可以获得Pij的兴趣值,问至少得到m兴趣值的数学期望是多少,如果没有的话就输出No solution。
数学期望很好求,求出符合的方案数与总方案之比就是概率,概率的倒数就是期望。问题在于怎么安排这些题目的做题顺序,如果直接暴力的话,有12!种情况,铁定超时,所以我们可以转换成dp的思想,总共就是12道题,也就212-1种状态,我们枚举每个状态得多少分时的方案数,最终符合的方案数就是dp[212-1][m]。然而重点在于怎么表示这个状态,以及转移。我想的是二进制对应的第i位是0或者1就代表第i个题安排了没有,但是这样的话转移的时候就是要4重循环,果断超时。而观摩了qxdywjy的代码后,状态表示是二进制对应的第i位是0或者1就代表第i道题做了,这样状态的转移就只有用三重循环了,转移就是遍历所有状态,状态i如果第j题没做,那么转移到i|(1<<j)状态中,它就是是第num个做,num就是已经做了多少道题。
#include<cstdio>
#include<algorithm>
using namespace std;
int dp[(<<)+][],a[][],cf2[],jc[];
int main()
{
cf2[]=jc[]=;
for(int i=;i<=;i++)
{
cf2[i]=cf2[i-]<<;
jc[i]=jc[i-]*i;
}
int t,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=;i<cf2[n];i++)
for(int j=;j<=m;j++)
dp[i][j]=;
for(int i=;i<n;i++)
for(int j=;j<n;j++)
scanf("%d",&a[i][j]);
dp[][]=;
for(int i=;i<cf2[n];i++)
{
int num=;//num已经做了几道题
for(int j=;j<n;j++)
if(i&cf2[j])
num++;
for(int j=;j<n;j++)
if(!(i&cf2[j]))//如果第j题还没做
{
for(int k=;k<=m;k++)
{
int lim=min(m,k+a[j][num]);//多于m就算m,节省空间
dp[i|cf2[j]][lim]+=dp[i][k];
}
}
}
int ans1=jc[n],ans2=dp[cf2[n]-][m];
if(ans2==)
printf("No solution\n");
else
{
int g=__gcd(ans1,ans2);
printf("%d/%d\n",ans1/g,ans2/g);
}
}
return ;
}
状压呀
最新文章
- 为什么房间的 Wi-Fi 信号这么差
- ubuntu下gedit闪退,遇到问题:ERROR:../../gi/pygi-argument.c:1583:_pygi_argument_to_object: code should not be reached 已放弃 (核心已转储)
- [译]何时使用 Parallel.ForEach,何时使用 PLINQ
- 由select * from table where 1=1中的1=1说开数据库
- js延迟加载,提升网页加载速度
- MVC MVVM Knockout viewmodel 提交 完整过程,包含序列化 JSON 和 字典模型绑定
- 修改Intellij Idea 创建maven项目默认Java编译版本
- 在 ServiceModel 客户端配置部分中,找不到引用协定“PmWs.PmWebServiceSoap”的默认终结点元素
- python学习笔记:python字符串
- Nginx 搭建反向代理服务器过程详解
- 分享一本书<;<;谁都不敢欺负你>;>;
- SV-assertion
- HFun.快速开发平台(二)=》自定义列表实例
- nodejs之mock与跨域代理的三两事
- Spring Boot 中使用 @Transactional 注解配置事务管理
- C语言进阶——Day 1
- Spark 学习笔记 —— 常见API
- spark streaming 整合kafka(二)
- weld
- ----关于grid----
热门文章
- JavaScript-checkbox标签-隐藏、显示、全选、取消和反选等操作
- 思科设备ACL与NAT技术
- 美团2017年CodeM大赛-初赛A轮 C合并回文子串
- ZOOKEEPER之WATCHER简介
- node 基本搭建 server.js
- vue-element-admin 多层路由问题
- webpack升级4出现的问题
- 【玩转SpringBoot】通过事件机制参与SpringBoot应用的启动过程
- hadoop-2.7.3安装kafka_2.11-2.1.0
- 正确理解这四个重要且容易混乱的知识点:异步,同步,阻塞,非阻塞,5种IO模型