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

状压呀

最新文章

  1. 为什么房间的 Wi-Fi 信号这么差
  2. ubuntu下gedit闪退,遇到问题:ERROR:../../gi/pygi-argument.c:1583:_pygi_argument_to_object: code should not be reached 已放弃 (核心已转储)
  3. [译]何时使用 Parallel.ForEach,何时使用 PLINQ
  4. 由select * from table where 1=1中的1=1说开数据库
  5. js延迟加载,提升网页加载速度
  6. MVC MVVM Knockout viewmodel 提交 完整过程,包含序列化 JSON 和 字典模型绑定
  7. 修改Intellij Idea 创建maven项目默认Java编译版本
  8. 在 ServiceModel 客户端配置部分中,找不到引用协定“PmWs.PmWebServiceSoap”的默认终结点元素
  9. python学习笔记:python字符串
  10. Nginx 搭建反向代理服务器过程详解
  11. 分享一本书&lt;&lt;谁都不敢欺负你&gt;&gt;
  12. SV-assertion
  13. HFun.快速开发平台(二)=》自定义列表实例
  14. nodejs之mock与跨域代理的三两事
  15. Spring Boot 中使用 @Transactional 注解配置事务管理
  16. C语言进阶——Day 1
  17. Spark 学习笔记 —— 常见API
  18. spark streaming 整合kafka(二)
  19. weld
  20. ----关于grid----

热门文章

  1. JavaScript-checkbox标签-隐藏、显示、全选、取消和反选等操作
  2. 思科设备ACL与NAT技术
  3. 美团2017年CodeM大赛-初赛A轮 C合并回文子串
  4. ZOOKEEPER之WATCHER简介
  5. node 基本搭建 server.js
  6. vue-element-admin 多层路由问题
  7. webpack升级4出现的问题
  8. 【玩转SpringBoot】通过事件机制参与SpringBoot应用的启动过程
  9. hadoop-2.7.3安装kafka_2.11-2.1.0
  10. 正确理解这四个重要且容易混乱的知识点:异步,同步,阻塞,非阻塞,5种IO模型