题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3777

Time Limit: 2 Seconds      Memory Limit: 65536 KB

The 11th Zhejiang Provincial Collegiate Programming Contest is coming! As a problem setter, Edward is going to arrange the order of the problems. As we know, the arrangement will have a great effect on the result of the contest. For example, it will take more time to finish the first problem if the easiest problem hides in the middle of the problem list.

There are N problems in the contest. Certainly, it's not interesting if the problems are sorted in the order of increasing difficulty. Edward decides to arrange the problems in a different way. After a careful study, he found out that the i-th problem placed in the j-th position will add Pij points of "interesting value" to the contest.

Edward wrote a program which can generate a random permutation of the problems. If the total interesting value of a permutation is larger than or equal to M points, the permutation is acceptable. Edward wants to know the expected times of generation needed to obtain the first acceptable permutation.

Input

There are multiple test cases. The first line of input contains an integer T indicating the number of test cases. For each test case:

The first line contains two integers N (1 <= N <= 12) and M (1 <= M <= 500).

The next N lines, each line contains N integers. The j-th integer in the i-th line is Pij (0 <= Pij <= 100).

Output

For each test case, output the expected times in the form of irreducible fraction. An irreducible fraction is a fraction in which the numerator and denominator are positive integers and have no other common divisors than 1. If it is impossible to get an acceptable permutation, output "No solution" instead.

Sample Input

2
3 10
2 4 1
3 2 2
4 5 3
2 6
1 3
2 4

Sample Output

3/1
No solution

题意:

有n个题目,按从简单到难,若把第i难的题目放到第j个位置,会产生P[i][j]的“有趣度”;

现在有一个随机产生这n个题目排列的程序,若一个排列它的所有题目有趣度之和大于等于m,则算作满足要求;

求产生一个满足要求的题目排列的期望次数。

题解:

状压DP做法:state是一个n位的二进制数,每一位 1 or 0 代表了该位置是否被占掉了;

假设dp[state][k]代表:前i道题的放置情况按state安排,产生有趣度为k的方案数;

状态转移:

  若要计算cnt道题目按state安排情况下,dp[state][k]的值(所有有趣度k>m的方案都算在k=m里),则:

  从state里去掉一道题目,假设去掉的是放在第i个位置上的那道题目,得到new_state(这个new_state必然小于state),

  再枚举k=0~m,dp[state][(k+p[cnt][i])] += dp[new_state][k],同样记得把所有有趣度k>m的方案都算到k=m里。

正确性:

当state=0时,即初始dp[0][0]为1,dp[0][1~m]都为0,这是正确的,故可以从state=1开始状态转移;

同时,正如前面说的new_state必然小于state,我们从小到大枚举state,那么计算state时所有new_state都必然已经计算好了。

AC代码:

#include<bits/stdc++.h>
using namespace std; int n,m;
int p[][];
int dp[<<][]; inline int gcd(int m,int n){return n?gcd(n,m%n):m;} int fact[];
void calcfact()
{
fact[]=;
for(int i=;i<=;i++) fact[i]=fact[i-]*i;
} int main()
{
calcfact(); int t;
scanf("%d",&t);
memset(p,,sizeof(p));
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) for(int j=;j<=n;j++) scanf("%d",&p[i][j]); memset(dp,,sizeof(dp));
dp[][]=;
for(int sta=;sta<(<<n);sta++) //遍历所有状态
{
int cnt=; //cnt表示已经安排好了cnt道题目
for(int i=;i<=n;i++) if(sta&(<<(i-))) cnt++; for(int i=;i<=n;i++)
{
if( ( sta & (<<(i-)) ) == ) continue; for(int k=;k<=m;k++)
{
if(k+p[cnt][i]>=m) dp[sta][m]+=dp[sta^(<<(i-))][k];
else dp[sta][k+p[cnt][i]]+=dp[sta^(<<(i-))][k];
}
}
} if(dp[(<<n)-][m]==)
{
printf("No solution\n");
continue;
} int down=dp[(<<n)-][m];
int up=fact[n];
int g=gcd(up,down);
printf("%d/%d\n",up/g,down/g);
}
}

时间复杂度O(n2)+O(2nmn)+O(lg(n!)),显然在数据较大时,主要影响项是O(2nmn),根据数据规模(2^12)*12*500 ≈ 2e7,足够。

PS.自从上次做状压DP专题之后,很久没有再做状压DP的题目了,发现自己对状压DP的理解还是不够深刻,而且忘记地也很快,需要复习巩固。

ZOJ 3777 - Problem Arrangement - [状压DP][第11届浙江省赛B题]的更多相关文章

  1. ZOJ 3780 - Paint the Grid Again - [模拟][第11届浙江省赛E题]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3780 Time Limit: 2 Seconds      Me ...

  2. zoj3777 Problem Arrangement(状压dp,思路赞)

    The 11th Zhejiang Provincial Collegiate Programming Contest is coming! As a problem setter, Edward i ...

  3. ZOJ 3777 B - Problem Arrangement 状压DP

    LINK:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3777 题意:有N(\( N <= 12 \))道题,排顺序 ...

  4. zoj 3777 Problem Arrangement(壮压+背包)

    Problem Arrangement Time Limit: 2 Seconds      Memory Limit: 65536 KB The 11th Zhejiang Provincial C ...

  5. 2014 Super Training #4 B Problem Arrangement --状压DP

    原题:ZOJ 3777  http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3777 题意:给每个题目安排在每个位置的value ...

  6. ZOJ 3781 - Paint the Grid Reloaded - [DFS连通块缩点建图+BFS求深度][第11届浙江省赛F题]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3781 Time Limit: 2 Seconds      Me ...

  7. FZU - 2218 Simple String Problem(状压dp)

    Simple String Problem Recently, you have found your interest in string theory. Here is an interestin ...

  8. zoj 3777 Problem Arrangement

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5264 题意:给出n道题目以及每一道题目不同时间做的兴趣值,让你求出所有做题顺序 ...

  9. ZOJ 3723 (浙大月赛)状压DP

    A了一整天~~~终于搞掉了. 真是血都A出来了. 题目意思很清楚,肯定是状压DP. 我们可以联系一下POJ 1185  炮兵阵地,经典的状压DP. 两道题的区别就在于,这道题的攻击是可以被X挡住的,而 ...

随机推荐

  1. 泛泰A870K去掉相机快门声音的方法

    首先ROOT手机,挂载读写,/system/media/audio/ui里面哈,把camera-click.ogg改成camera-click.ogg.bak就可以了 转载自:http://bbs.9 ...

  2. 8 -- 深入使用Spring -- 3...1 Resource实现类ServletContextResource

    8.3.1 Resource实现类------ServletContextResource:访问相对于ServletContext路径下的资源的实现类. 4.访问应用相关资源 Spring提供了Ser ...

  3. underscore.js定义模板遇到问题:Uncaught TypeError: Cannot read property 'replace' of undefined

    代码正确缩进位置如下, extend "layout" block 'content',-> div ->'nihao' script id:"Invoice ...

  4. 【视频】ffmpeg mov mp4 m3u8 ts

    1.https://ffmpeg.zeranoe.com/builds/ 2.https://blog.csdn.net/psh18513234633/article/details/79312607 ...

  5. 运行RF测试案例,显示unable to open socket to "localhost:56505" error: [Errno 10061] 错误,且关闭RF卡死的解决办法

    问题描述: 执行WEB ui测试案例后,执行请他的测试案例显示unable to open socket to "localhost:56505" error: [Errno 10 ...

  6. material mem

    http://blog.csdn.net/caihaijiang/article/details/5903133 http://akunamotata.iteye.com/blog/1625804 刷 ...

  7. 使用 PyQuery

    PyQuery 用法: (1) 前面我们爬取一个网页,都是使用正则表达式来提取想要的信息,但是这种方式比较复杂,一旦有一个地方写错,就匹配不出来了,因此我们可以使用 PyQuery(2) PyQuer ...

  8. MQTT-C-PUB

    /* ============================================================================ Name        : mqtest ...

  9. linux下getsockopt和setsockopt详解及测试

    linux下getsockopt和setsockopt详解及测试 NAME 名字 getsockopt, setsockopt - get and set options on sockets 获取或 ...

  10. N76E003之IO控制

    N76E003最多支持26个可位寻址的通用I/O引脚,分成4组 P0 到 P3 .每一个端口有它的端口控制寄存器(Px).端口控制寄存器的写和读有不同的意思.写端口控制寄存器设置输出锁存逻辑值,读端口 ...