2014
ACM/ICPC Asia Regional Anshan Online

给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率

概率DP  測试数据太水了。。。。10000*50*50*50都能过

加个vector优化到

#include "stdio.h"
#include "string.h"
#include "vector"
using namespace std; double dp[10][101][101];
double ans[101];
vector<int>map[101];
int cnt[101];
int main()
{
int n,m,d,Case,a,b,i,j,k,l;
scanf("%d",&Case);
while (Case--)
{
scanf("%d%d%d",&n,&m,&d);
memset(cnt,0,sizeof(cnt));
while (m--)
{
scanf("%d%d",&a,&b);
cnt[a]++;
cnt[b]++;
map[a].push_back(b);
map[b].push_back(a);
}
memset(dp,0,sizeof(dp)); for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (i!=j)
dp[0][i][j]+=1.0/n; // dp[d][i][j] 第d步,终点为i,中途不经过j的概率 for (i=1;i<=d;i++)
{
memset(dp[i%2],0,sizeof(dp[i%2]));
for (j=1;j<=n;j++)
for (k=0;k<map[j].size();k++)
for (l=1;l<=n;l++)
if (j!=l && j!=map[j][k])
dp[i%2][map[j][k]][l]+=dp[1-i%2][j][l]*1.0/cnt[j];
}
memset(ans,0,sizeof(ans));
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (i!=j)
ans[i]+=dp[d%2][j][i];
for (i=1;i<=n;i++)
{
printf("%.10lf\n",ans[i]);
map[i].clear();
}
}
return 0;
}

记忆化搜索: 每次去掉一个点,然后对剩下的点进行记忆化搜索

#include "stdio.h"
#include "string.h"
#include "vector"
using namespace std; int vis[101][10011],cnt[101];
double dp[101][10011];
int d;
vector<int>map[101];
double dfs(int a,int b,int c) //当前在a点,已经走了b步,不经过c点
{
int i;
double ans;
if (vis[a][b]) return dp[a][b];
vis[a][b]=1;
ans=0;
if (b>d) return dp[a][b]=1;
for (i=0;i<map[a].size();i++)
if (map[a][i]!=c)
ans+=1.0/cnt[a]*dfs(map[a][i],b+1,c);
return dp[a][b]=ans; } int main()
{
int Case,n,m,i,a,b;
scanf("%d",&Case);
while (Case--)
{
scanf("%d%d%d",&n,&m,&d);
memset(cnt,0,sizeof(cnt));
for (i=0;i<=n;i++)
map[i].clear();
while (m--)
{
scanf("%d%d",&a,&b);
cnt[a]++;
cnt[b]++;
map[a].push_back(b);
map[b].push_back(a);
}
memset(dp,0,sizeof(dp));
for (i=1;i<=n;i++)
map[0].push_back(i);
cnt[0]=n; for (i=1;i<=n;i++)
{
memset(vis,0,sizeof(vis));
printf("%.10lf\n",dfs(0,0,i));
}
}
return 0;
}

HDU 5001 概率DP || 记忆化搜索的更多相关文章

  1. HDU - 5001 Walk(概率dp+记忆化搜索)

    Walk I used to think I could be anything, but now I know that I couldn't do anything. So I started t ...

  2. Codeforces 148D Bag of mice:概率dp 记忆化搜索

    题目链接:http://codeforces.com/problemset/problem/148/D 题意: 一个袋子中有w只白老鼠,b只黑老鼠. 公主和龙轮流从袋子里随机抓一只老鼠出来,不放回,公 ...

  3. CodeForces 398B 概率DP 记忆化搜索

    题目:http://codeforces.com/contest/398/problem/B 有点似曾相识的感觉,记忆中上次那个跟这个相似的 我是用了 暴力搜索过掉的,今天这个肯定不行了,dp方程想了 ...

  4. hdu3559 Frost Chain (概率dp+记忆化搜索)

    Problem Description In the unimaginable popular DotA game, the hero Lich has a wonderful skill: Fros ...

  5. 【bzoj5123】[Lydsy12月赛]线段树的匹配 树形dp+记忆化搜索

    题目描述 求一棵 $[1,n]$ 的线段树的最大匹配数目与方案数. $n\le 10^{18}$ 题解 树形dp+记忆化搜索 设 $f[l][r]$ 表示根节点为 $[l,r]$ 的线段树,匹配选择根 ...

  6. 【BZOJ】1415 [Noi2005]聪聪和可可 期望DP+记忆化搜索

    [题意]给定无向图,聪聪和可可各自位于一点,可可每单位时间随机向周围走一步或停留,聪聪每单位时间追两步(先走),问追到可可的期望时间.n<=1000. [算法]期望DP+记忆化搜索 [题解]首先 ...

  7. [题解](树形dp/记忆化搜索)luogu_P1040_加分二叉树

    树形dp/记忆化搜索 首先可以看出树形dp,因为第一个问题并不需要知道子树的样子, 然而第二个输出前序遍历,必须知道每个子树的根节点,需要在树形dp过程中记录,递归输出 那么如何求最大加分树——根据中 ...

  8. poj1664 dp记忆化搜索

    http://poj.org/problem?id=1664 Description 把M个相同的苹果放在N个相同的盘子里,同意有的盘子空着不放,问共同拥有多少种不同的分法?(用K表示)5.1.1和1 ...

  9. 状压DP+记忆化搜索 UVA 1252 Twenty Questions

    题目传送门 /* 题意:给出一系列的01字符串,问最少要问几个问题(列)能把它们区分出来 状态DP+记忆化搜索:dp[s1][s2]表示问题集合为s1.答案对错集合为s2时,还要问几次才能区分出来 若 ...

随机推荐

  1. 小谷的战斗Jquery(三)--水平和垂直菜单

    日薪的例子似乎有点低,今天做多.行,这种实现是一个简单的菜单,Web项目中,有两个共同的菜单:纵向和横向.说到从垂直,看原代码. html代码实现最主要的菜单与子菜单 <span style=& ...

  2. MVC 01

    ASP.NET MVC 01 - ASP.NET概述 本篇目录: ASP.NET 概述 .NET Framework 与 ASP.NET ASP.NET MVC简介 ASP.NET的特色和优势 典型案 ...

  3. 在内存中建立 MySQL 的临时目录(转)

    MySQL 系统会在内存(MEMORY)和磁盘(MyISAM)中建立临时表,如何能知道在磁盘中建立了多少临时表以及在内存中建立多少临时表呢?你可以通过下面命令获知: ? 1 2 3 4 5 6 7 m ...

  4. OAuth打造webapi认证服务

    使用OAuth打造webapi认证服务供自己的客户端使用 一.什么是OAuth OAuth是一个关于授权(Authorization)的开放网络标准,目前的版本是2.0版.注意是Authorizati ...

  5. ipset高大上性能果断将nf-HiPac逼下课

    netfilter.sourceforge,github上有一个凄凉的项目,那就是nf-hipac.这个以前给Linux firewall设计带来希望的项目早在2005年就停止了更新和维护,而我本人则 ...

  6. mod_wsgi + pymssql通路SQL Server座

    靠pymssql通路SQL Server时刻,直接地python没有问题的执行.靠mod_wsgi和Apache当部署.所有请求被发现hang然后数据库查询. 通过google查到了答案,感谢goog ...

  7. MemberwishClone学习

    /* * Created by SharpDevelop. * User: My little flower basket * Date: 2013/7/12 * Time: 9:37 * * To ...

  8. 分布式中使用Redis实现Session共享(转)

    上一篇介绍了如何使用nginx+iis部署一个简单的分布式系统,文章结尾留下了几个问题,其中一个是"如何解决多站点下Session共享".这篇文章将会介绍如何使用Redis,下一篇 ...

  9. JUnit实战(2) - JUnit核心(使用Suite来组合测试)

    创建Java Project项目:ch02-internals MasterTestSuite.java package com.manning.junitbook.ch02.internals; i ...

  10. 《STL源代码分析》---stl_heap.h读书笔记

    Heap堆的数据结构是经常使用,Heap它还能够存储元件的.但STL并且不提供Heap集装箱.仅仅提供信息Heap算术运算.只支持RandomAccessIterator该容器可以被用作Heap集装箱 ...