ZOJ 3605Find the Marble(dp)
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)相关推荐
- ZOJ 1425 Crossed Matchings DP LCS
ZOJ 1425 Crossed Matchings 题目描述: 题目链接:ZOJ 1425 Crossed Matchings 题目大意: 上下2组数据,找一个满足条件的最大匹配数.匹配条件是任意一 ...
- zoj 3812 状压dp
转载:http://blog.csdn.net/qian99/article/details/39138329 题意:给出n个物品,每个物品有两种属性Wi,Ti,有q组查询,每组查询要求在n个物品中选 ...
- zoj 3351 Bloodsucker(概率 dp)
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4530 dp[i]表示现在存在i个吸血鬼要达成目标(全为吸血鬼)天数的数学 ...
- ZOJ 3471 压缩状态DP
这个问题要看状态怎么想,第一种直接的想法是1代表未合并,状态就从1111111 转移到 带有1个0,然后带有两个0, 但是这样子编程非常不直观.换一种思路,0代表未合并,但是我可以先合并前几个,就是说 ...
- ZOJ - 4114 Flipping Game(dp+组合数学)
题目链接:点击查看 题目大意:给出一个长度为 n 的 01 字符串表示 n 个灯泡的状态,1 为点亮,0 为熄灭,现在需要进行 k 轮操作,每轮操作可以选择恰好 m 个位置,将灯泡的状态置反,现在给出 ...
- ZOJ.3551.Bloodsucker(期望DP)
题目链接 \(Description\) 有1个吸血鬼和n-1个人,每天有且只会有两个人/吸血鬼相遇,如果是人与吸血鬼相遇,那个人会有p的概率变成吸血鬼:否则什么也不发生.求n个都变成吸血鬼的期望天数 ...
- zoj 3725 Painting Storages dp
最近做题没状态,其实我觉得最大的问题就是没自信,不敢写,还是没有勇气,我发现这都是自己的性格,生活中的我也是这个样子,应该在不断成长! 题目大意:连续的n个点,每个点可以染红色或者蓝色,求连续染m个红 ...
- Travel(HDU 4284状压dp)
题意:给n个城市m条路的网图,pp在城市1有一定的钱,想游览这n个城市(包括1),到达一个城市要一定的花费,可以在城市工作赚钱,但前提有工作证(得到有一定的花费),没工作证不能在该城市工作,但可以走, ...
- linux 标准分区 lvm,Linux lvm 分区知识笔记
盘面上可以细分出扇区(Sector)与柱面(Cylinder)两种单位,其中扇区每个为512bytes那么大. 通常所说的"硬盘分区"就是指修改磁盘分区表,它定义了"第n ...
- mysql 5.6 federated_Mysql 开启Federated引擎以及使用
FEDERATED是其中一个专门针对远程数据库的实现.但通过FEDERATED引擎创建的表只是在本地有表定义文件,数据文件则存在于远程数据库中 通过这个引擎可以实现类似Oracle 下DBLINK的远 ...
最新文章
- HDLBits 系列(9)Gates and Vector
- [密码学] 高级加密标准AES
- SAP CRM Fiori my task应用是如何在My Account应用里加载的
- 我的Dojo中有一个Mojo(如何编写Maven插件)
- spring配置文件注解方式引入的两种方式
- [css] 如何使用CSS绘制一个汉堡式菜单
- 算法(7)-leetcode-explore-learn-数据结构-数组-小结
- PHP设计模式——单例模式
- Windows Server上用命令来起停IIS站点
- FLTK学习笔记4-在FLTK中显示图片(上)
- 摩西十诫 摩西简介 世界宗教图谱
- EDA365_skill2.5百度网盘资源
- 易语言版{大智慧/分析家/飞狐交易师}DLL插件接口开发模块(beta),自定义股票软件公式扩展函数...
- 【U8+】修改查询凭证列表中的系统名
- 计算机中专生实习单位的鉴定表,中专生的实习自我鉴定(精选5篇)
- 基于Java+Swing+Mysql酒店客房预订管理系统设计
- 软考高级系统架构设计师:五大类安全服务
- 安装CentOS找不到硬盘,无法分区,No disks selected
- (转)Django新手需要注意的10个要点
- 国科大五位本科生带“芯”毕业!平均年龄23.1岁,四个月主导完成64位RISC-V处理器SoC芯片设计并实现流片