ZOJ 3605

大体意思就是 找出随机选了K个交换后 石子在第i个罐子里的概率最大

也就是可能的总数最大 这样就可以写出递推方程 dp[i][j][k] += dp[i-1][e][k]; (0<e<j&& k!=a[j]&&k!=b[j]) dp[i][j][a[j]]+=dp[i-1][e][b[j]] dp[i][j][b[j]]+=dp[i-1][e][a[j]];

dp[i][j][k]表示选第i次交换时 选的为第j个 而且石子在第K个罐子里的可能 这样有两种可能 1:石子在a[j]或b[j]中 也就是要交换的两个罐头里 那么可能数就交换相加,然后再加别的。

要么是不在 那么就加上上一步的可能总数 。

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<stdlib.h>
 6 #include<vector>
 7 #include<cmath>
 8 #include<queue>
 9 #include<set>
10 using namespace std;
11 #define N 100000
12 #define LL long long
13 #define INF 0xfffffff
14 const double eps = 1e-8;
15 const double pi = acos(-1.0);
16 const double inf = ~0u>>2;
17 LL dp[55][55][55],sum[55];
18 int a[55],b[55];
19 int main()
20 {
21     int s,g,e,t,i,j,k,n,m;
22     cin>>t;
23     while(t--)
24     {
25         cin>>n>>m>>k>>s;
26         memset(dp,0,sizeof(dp));
27         memset(sum,0,sizeof(sum));
28         for(i =1; i <= m ;i++)
29         {
30             cin>>a[i]>>b[i];
31             if(a[i]==s)
32             dp[1][i][b[i]] = 1;
33             else if(b[i]==s)
34             dp[1][i][a[i]] = 1;
35             else
36             dp[1][i][s] = 1;
37         }
38         for(i = 2 ; i<= k ;i++)
39             for(j = i; j <= m ;j++)
40             {
41                 for(e = i-1 ; e < j; e++)
42                 {
43                     if(a[j]!=b[j])
44                     {
45                         dp[i][j][a[j]]+=dp[i-1][e][b[j]];
46                         dp[i][j][b[j]]+=dp[i-1][e][a[j]];
47                     }
48                     else
49                     dp[i][j][a[j]] += dp[i-1][e][a[j]];
50                     for(g = 1; g <= n ;g++)
51                     {
52                         if(g==a[j]) continue;
53                         if(g==b[j]) continue;
54                         dp[i][j][g]+=dp[i-1][e][g];
55                     }
56                 }
57             }
58         LL maxz=0;
59         int ans = s;
60         for(i = k; i <= m ; i++)
61         {
62             for(j = 1; j <= n ; j++)
63             {
64                 sum[j]+=dp[k][i][j];
65             }
66         }
67         for(i = 1; i <= n ;i++)
68         {
69             if(maxz<sum[i])
70             {
71                 ans = i;
72                 maxz = sum[i];
73             }
74         }
75         cout<<ans<<endl;
76     }
77     return 0;
78 }

View Code

转载于:https://www.cnblogs.com/shangyu/p/3588662.html

ZOJ 3605Find the Marble(dp)相关推荐

  1. ZOJ 1425 Crossed Matchings DP LCS

    ZOJ 1425 Crossed Matchings 题目描述: 题目链接:ZOJ 1425 Crossed Matchings 题目大意: 上下2组数据,找一个满足条件的最大匹配数.匹配条件是任意一 ...

  2. zoj 3812 状压dp

    转载:http://blog.csdn.net/qian99/article/details/39138329 题意:给出n个物品,每个物品有两种属性Wi,Ti,有q组查询,每组查询要求在n个物品中选 ...

  3. zoj 3351 Bloodsucker(概率 dp)

    题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4530 dp[i]表示现在存在i个吸血鬼要达成目标(全为吸血鬼)天数的数学 ...

  4. ZOJ 3471 压缩状态DP

    这个问题要看状态怎么想,第一种直接的想法是1代表未合并,状态就从1111111 转移到 带有1个0,然后带有两个0, 但是这样子编程非常不直观.换一种思路,0代表未合并,但是我可以先合并前几个,就是说 ...

  5. ZOJ - 4114 Flipping Game(dp+组合数学)

    题目链接:点击查看 题目大意:给出一个长度为 n 的 01 字符串表示 n 个灯泡的状态,1 为点亮,0 为熄灭,现在需要进行 k 轮操作,每轮操作可以选择恰好 m 个位置,将灯泡的状态置反,现在给出 ...

  6. ZOJ.3551.Bloodsucker(期望DP)

    题目链接 \(Description\) 有1个吸血鬼和n-1个人,每天有且只会有两个人/吸血鬼相遇,如果是人与吸血鬼相遇,那个人会有p的概率变成吸血鬼:否则什么也不发生.求n个都变成吸血鬼的期望天数 ...

  7. zoj 3725 Painting Storages dp

    最近做题没状态,其实我觉得最大的问题就是没自信,不敢写,还是没有勇气,我发现这都是自己的性格,生活中的我也是这个样子,应该在不断成长! 题目大意:连续的n个点,每个点可以染红色或者蓝色,求连续染m个红 ...

  8. Travel(HDU 4284状压dp)

    题意:给n个城市m条路的网图,pp在城市1有一定的钱,想游览这n个城市(包括1),到达一个城市要一定的花费,可以在城市工作赚钱,但前提有工作证(得到有一定的花费),没工作证不能在该城市工作,但可以走, ...

  9. linux 标准分区 lvm,Linux lvm 分区知识笔记

    盘面上可以细分出扇区(Sector)与柱面(Cylinder)两种单位,其中扇区每个为512bytes那么大. 通常所说的"硬盘分区"就是指修改磁盘分区表,它定义了"第n ...

  10. mysql 5.6 federated_Mysql 开启Federated引擎以及使用

    FEDERATED是其中一个专门针对远程数据库的实现.但通过FEDERATED引擎创建的表只是在本地有表定义文件,数据文件则存在于远程数据库中 通过这个引擎可以实现类似Oracle 下DBLINK的远 ...

最新文章

  1. HDLBits 系列(9)Gates and Vector
  2. [密码学] 高级加密标准AES
  3. SAP CRM Fiori my task应用是如何在My Account应用里加载的
  4. 我的Dojo中有一个Mojo(如何编写Maven插件)
  5. spring配置文件注解方式引入的两种方式
  6. [css] 如何使用CSS绘制一个汉堡式菜单
  7. 算法(7)-leetcode-explore-learn-数据结构-数组-小结
  8. PHP设计模式——单例模式
  9. Windows Server上用命令来起停IIS站点
  10. FLTK学习笔记4-在FLTK中显示图片(上)
  11. 摩西十诫 摩西简介 世界宗教图谱
  12. EDA365_skill2.5百度网盘资源
  13. 易语言版{大智慧/分析家/飞狐交易师}DLL插件接口开发模块(beta),自定义股票软件公式扩展函数...
  14. 【U8+】修改查询凭证列表中的系统名
  15. 计算机中专生实习单位的鉴定表,中专生的实习自我鉴定(精选5篇)
  16. 基于Java+Swing+Mysql酒店客房预订管理系统设计
  17. 软考高级系统架构设计师:五大类安全服务
  18. 安装CentOS找不到硬盘,无法分区,No disks selected
  19. (转)Django新手需要注意的10个要点
  20. 国科大五位本科生带“芯”毕业!平均年龄23.1岁,四个月主导完成64位RISC-V处理器SoC芯片设计并实现流片

热门文章

  1. QSqlQueryModel结合QTreeView遇到的查询结果不显示的问题
  2. [你的灯亮着吗]读书笔记
  3. filter的作用 一
  4. ASP.NET把图片存入数据库和使用文件流读取显示(转)
  5. BZOJ1767/Gym207383I CEOI2009 Harbingers 斜率优化、可持久化单调栈、二分
  6. 企业库实现AOP的几种方法
  7. Arduino 各种模块篇 舵机 Modules - Servo
  8. 用十句简单英语激活你的口语
  9. 《剑指offer》第五十二题(两个链表的第一个公共结点)
  10. translclude