宝物

【bzoj1076】 SCOI2008—奖励关

风格不统一 提交于 2020-04-08 14:00:06
http://www.lydsy.com/JudgeOnline/problem.php?id=1076 (题目链接) 题意   一个奖励,K次抛出宝物的机会,每次抛出都等概率的抛出n个物品中的一个,每个物品有一个价值,想获得每个物品必须先获得一些另一些物品。求最终获得的价值的期望。 Solution   题意不明啊!!!   好吧,令${f_{i,s}}$表示第i次,之前获得过的宝物的状态为s的期望得分。   那么很显然我们可以列出期望方程: $${f_{i,s}=\sum_{j=1}^{n}Max\{f_{i+1,s|bin[j-1]},f_{i+1,s}\}}$$   宝物抛出后,可以吃也可以不吃。注意条件。 代码 // bzoj1076 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<cmath> #include<queue> #define LL long long #define inf 1<<30 #define Pi acos(-1.0) #define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout); using namespace

BZOJ1076:[SCOI2008]奖励关——题解

百般思念 提交于 2020-04-08 12:28:35
http://www.lydsy.com/JudgeOnline/problem.php?id=1076 https://www.luogu.org/problemnew/show/P2473 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关。在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃)。 宝物一共有n种,系统每次抛出这n种宝物的概率都相同且相互独立。也就是说,即使前k-1 次系统都抛出宝物1(这种情况是有可能出现的,尽管概率非常小),第k次抛出各个宝物的概率依然均为1/n。 获取第 i 种宝物将得到Pi分,但并不是每种宝物都是可以随意获取的。第i种宝物有一个前提宝物集合Si。只有当Si中所有宝物都至少吃过一次,才能吃第i 种宝物(如果系统抛出了一个目前不能吃的宝物,相当于白白的损失了一次机会)。注意,Pi 可以是负数,但如果它是很多高分宝物的前提,损失短期利益而吃掉这个负分宝物将获得更大的长期利益。 假设你采取最优策略,平均情况你一共能在奖励关得到多少分值? 因为自己的期望太垃圾于是主动找期望题刷。 结果同时碰上了自己不太会的状压。 写就写,谁怕谁。 ———————————— 先想暴力,显然枚举最后状态不断往前dfs得到最优解即可。 转标程,打眼一看n很小,直接想到状压f[i][j

P2473 [SCOI2008]奖励关

喜欢而已 提交于 2020-04-08 12:25:45
P2473 [SCOI2008]奖励关 链接:https://www.luogu.org/problemnew/show/P2473 题目背景 08四川NOI省选 题目描述 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关。在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃)。 宝物一共有n种,系统每次抛出这n种宝物的概率都相同且相互独立。也就是说,即使前k-1 次系统都抛出宝物1(这种情况是有可能出现的,尽管概率非常小),第k次抛出各个宝物的概率依然均为1/n。 获取第 i 种宝物将得到Pi分,但并不是每种宝物都是可以随意获取的。第i种宝物有一个前提宝物集合Si。只有当Si中所有宝物都至少吃过一次,才能吃第i 种宝物(如果系统抛出了一个目前不能吃的宝物,相当于白白的损失了一次机会)。注意,Pi 可以是负数,但如果它是很多高分宝物的前提,损失短期利益而吃掉这个负分宝物将获得更大的长期利益。 假设你采取最优策略,平均情况你一共能在奖励关得到多少分值? 输入输出格式 输入格式: 第一行为两个正整数k 和n,即宝物的数量和种类。以下n行分别描述一种 宝物,其中第一个整数代表分值,随后的整数依次代表该宝物的各个前提宝物(各 宝物编号为1到n),以0结尾。 输出格式: 输出一个实数,保留六位小数

洛谷P1776 宝物筛选

强颜欢笑 提交于 2020-02-08 13:08:01
题目描述 终于,破解了千年的难题。小 FF 找到了王室的宝物室,里面堆满了无数价值连城的宝物。 这下小 FF 可发财了,嘎嘎。但是这里的宝物实在是太多了,小 FF 的采集车似乎装不下那么多宝物。看来小 FF 只能含泪舍弃其中的一部分宝物了。 小 FF 对洞穴里的宝物进行了整理,他发现每样宝物都有一件或者多件。他粗略估算了下每样宝物的价值,之后开始了宝物筛选工作:小 FF 有一个最大载重为W的采集车,洞穴里总共有n种宝物,每种宝物的价值为vi,重量为wi,每种宝物有mi件。小 FF 希望在采集车不超载的前提下,选择一些宝物装进采集车,使得它们的价值和最大。 输入格式 第一行为一个整数n和W,分别表示宝物种数和采集车的最大载重。接下来n行每行三个整数vi,wi,mi。 输出格式 输出仅一个整数,表示在采集车不超载的情况下收集的宝物的最大价值。 输入输出样例 输入: 4 20 3 9 3 5 9 1 9 4 2 8 1 3 输出: 27 下面就是这道题的题解! 这道题好像就是 多重背包 多重背包有很多种思路去做,我会的一共有两种: 第一种是把多重背包看成是01背包来做 就直接说这个题,每种宝物有一个或者多个,我们可以把这多个看成是不同的物体,这样就是一个普通的01背包问题 但是嘞,这么做时间复杂度会暴增,肯定会爆掉几个点所以这个问题就不能用这个方法去做 所以直接进入下个方法:

1076: [SCOI2008]奖励关

佐手、 提交于 2020-01-09 05:01:51
1076: [SCOI2008]奖励关 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2078 Solved: 1118 [ Submit ][ Status ][ Discuss ] Description   你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关。在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃)。 宝物一共有n种,系统每次抛出这n种宝物的概率都相同且相互独立。也就是说,即使前k-1次系统都抛出宝物1( 这种情况是有可能出现的,尽管概率非常小),第k次抛出各个宝物的概率依然均为1/n。 获取第i种宝物将得到Pi 分,但并不是每种宝物都是可以随意获取的。第i种宝物有一个前提宝物集合Si。只有当Si中所有宝物都至少吃过 一次,才能吃第i种宝物(如果系统抛出了一个目前不能吃的宝物,相当于白白的损失了一次机会)。注意,Pi可 以是负数,但如果它是很多高分宝物的前提,损失短期利益而吃掉这个负分宝物将获得更大的长期利益。 假设你 采取最优策略,平均情况你一共能在奖励关得到多少分值? Input   第一行为两个正整数k和n,即宝物的数量和种类。以下n行分别描述一种宝物,其中第一个整数代表分值,随 后的整数依次代表该宝物的各个前提宝物

BZOJ1076:[SCOI2008]奖励关

南楼画角 提交于 2020-01-08 21:11:57
1076: [SCOI2008]奖励关 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2696 Solved: 1419 [ Submit ][ Status ][ Discuss ] Description   你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关。在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃)。 宝物一共有n种,系统每次抛出这n种宝物的概率都相同且相互独立。也就是说,即使前k-1次系统都抛出宝物1( 这种情况是有可能出现的,尽管概率非常小),第k次抛出各个宝物的概率依然均为1/n。 获取第i种宝物将得到Pi 分,但并不是每种宝物都是可以随意获取的。第i种宝物有一个前提宝物集合Si。只有当Si中所有宝物都至少吃过 一次,才能吃第i种宝物(如果系统抛出了一个目前不能吃的宝物,相当于白白的损失了一次机会)。注意,Pi可 以是负数,但如果它是很多高分宝物的前提,损失短期利益而吃掉这个负分宝物将获得更大的长期利益。 假设你 采取最优策略,平均情况你一共能在奖励关得到多少分值? Input   第一行为两个正整数k和n,即宝物的数量和种类。以下n行分别描述一种宝物,其中第一个整数代表分值,随 后的整数依次代表该宝物的各个前提宝物

奖励关

走远了吗. 提交于 2020-01-08 09:27:52
奖励关(期望dp) 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关。在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃)。宝物一共有n种,系统每次抛出这n种宝物的概率都相同且相互独立。也就是说,即使前k-1 次系统都抛出宝物1(这种情况是有可能出现的,尽管概率非常小),第k次抛出各个宝物的概率依然均为1/n。获取第 i 种宝物将得到Pi分,但并不是每种宝物都是可以随意获取的。第i种宝物有一个前提宝物集合Si。只有当Si中所有宝物都至少吃过一次,才能吃第i 种宝物(如果系统抛出了一个目前不能吃的宝物,相当于白白的损失了一次机会)。注意,Pi 可以是负数,但如果它是很多高分宝物的前提,损失短期利益而吃掉这个负分宝物将获得更大的长期利益。假设你采取最优策略,平均情况你一共能在奖励关得到多少分值?1 <= k <= 100, 1 <= n <= 15,分值为[-106,106]内的整数。 据说要倒推啊,这样才能保证不会出现推出无用状态。。其实我也不是特别懂。 #include <cstdio> #include <algorithm> using namespace std; const int maxn=17; int k, n, bit[maxn]; int v[maxn], pre[maxn

Bzoj1076 [SCOI2008]奖励关

泪湿孤枕 提交于 2020-01-08 02:36:07
Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1935 Solved: 1053 Description   你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关。在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃)。 宝物一共有n种,系统每次抛出这n种宝物的概率都相同且相互独立。也就是说,即使前k-1次系统都抛出宝物1( 这种情况是有可能出现的,尽管概率非常小),第k次抛出各个宝物的概率依然均为1/n。 获取第i种宝物将得到Pi 分,但并不是每种宝物都是可以随意获取的。第i种宝物有一个前提宝物集合Si。只有当Si中所有宝物都至少吃过 一次,才能吃第i种宝物(如果系统抛出了一个目前不能吃的宝物,相当于白白的损失了一次机会)。注意,Pi可 以是负数,但如果它是很多高分宝物的前提,损失短期利益而吃掉这个负分宝物将获得更大的长期利益。 假设你 采取最优策略,平均情况你一共能在奖励关得到多少分值? Input   第一行为两个正整数k和n,即宝物的数量和种类。以下n行分别描述一种宝物,其中第一个整数代表分值,随 后的整数依次代表该宝物的各个前提宝物(各宝物编号为1到n),以0结尾。 Output   输出一个实数,保留六位小数

算法学习之贪心法(背包问题)

China☆狼群 提交于 2019-12-22 04:09:31
贪心法介绍: 一个贪心算法总是做出当前最好的选择,也就是说,它期望通过局部最优选择从而得到全局最优的解决方案。 大体步骤: 贪心策略:制定贪心策略,并选择最佳的策略实施 局部最优解:通过策略,一步一步得到局部最优解。 全局最优解:把所有的局部最优解整合到一起,还原出原来问题的最优解。 示例如下 问题描述 假设山洞中有n种宝物,每种宝物有一定重量w和相应的价值v,毛驴运载能力有限,只能运走m重量的宝物,一种宝物只能拿一样,宝物可以分割。那么怎么才能让背包装走宝物的价值最大呢? 贪心策略 每次挑选价值最大的宝物装入背包,得到的结果是否为最优? 每次挑选重量最小的宝物装入背包,得到的结果是否为最优? 每次挑选价值单位重量价值最大的宝物装入背包,得到的结果是否为最优? 分析各策略后,我们挑选第三种策略:每次挑选价值单位重量价值最大的宝物装入背包。 思路 计算每件宝物的性价比 将宝物按性价比排序 按贪心策略依次将性价比最高的宝物放入背包 若是下一性价比最高宝物重量超过剩余背包容量,将宝物拆分后再放入背包 完整代码 #include<iostream> #include<algorithm> using namespace std; const int M = 10005; struct three { double w; // 宝物重量 double v; // 宝物价值 double p;

Zombie’s Treasure Chest

对着背影说爱祢 提交于 2019-12-02 15:14:29
Zombie’s Treasure Chest 这道题一看就用了完全背包,结果毫无疑问的挂了,看了一些大佬的解析后,发现有两种做法,一种是直接列举,另一种是通过最小公倍数的方法。 题意 有一个体积为N的箱子和两种数量无限的宝物。 宝物1的体积为S1,价值为V1;宝物2的体积为S2,价值为V2。你的任务是计算最多能装多大价值的宝物。 思路 枚举一:当s1和s2的体积很小,N很大的时候,由题意可知:s2个宝物1和s1个宝物2的体积相等,价值分别为s2 v1和s1 v2。所以当前者比较大的时候,宝物2最多s1-1个,因为以上的条件可知,当体积相等的条件下宝物1的价值大,所以宝物2不能再超出那个范围了,这样宝物1就不能放到最大化,总价值就不是最大化。后者较大时同理。 所以将俩种宝物都枚举后取最大的。 枚举二:当s1或s2的体积很大(即n/s1 n/s2 很小)时,枚举较大体积的那个宝物即可。 解法一 这些都要注意longlong //#include <bits/stdc++.h> # include <cstdio> # include <iostream> # include <cmath> # include <cstring> using namespace std ; # define LL long long int t ; LL n , s1 , s2 , v1 , v2 ;