HDU-4336 Card Collector

HDU-4336 Card Collector

题目链接

Translate:

n 种卡片,一包零食里会有一张卡片,其中是卡片 i 的概率是 pi

求集齐全部卡片的期望购买零食数。

1N20,p1

Solution:

fS 为从已有的状态为 S 时开始,集齐全部全部卡片的期望购买零食数,显然有:

前半部分是抽中原先没有的,后半部分是抽中已经有的或者没抽中,最后 +1 是因为购买了一包零食。

fS=iSfS{i}pi+(1iSpi)fS+1(iSpi)fS=(iSfS{i}pi)+1

状压dp即可。

参考代码

#include<iostream>
#include<cstdio>
#include<algorithm>
namespace do_while_true {
	#define ld double
	#define ll long long
	#define re register
	#define pb push_back
	#define fir first
	#define sec second
	#define pp std::pair
	#define mp std::make_pair
	const ll mod = 998244353;
	template <typename T>
	inline T Max(T x, T y) { return x > y ? x : y; }
	template <typename T>
	inline T Min(T x, T y) { return x < y ? x : y; }
	template <typename T>
	inline T Abs(T x) {	return x < 0 ? -x : x; }
	template <typename T>
	inline T& read(T& r) {
		r = 0; bool w = 0; char ch = getchar();
		while(ch < '0' || ch > '9') w = ch == '-' ? 1 : 0, ch = getchar();
		while(ch >= '0' && ch <= '9') r = r * 10 + (ch ^ 48), ch = getchar();
		return r = w ? -r : r;
	}
	template <typename T>
	inline T qpow(T x, T y) {
		re T sumq = 1; x %= mod;
		while(y) {
			if(y&1) sumq = sumq * x % mod;
			x = x * x % mod;
			y >>= 1;
		}
		return sumq;
	}
}
using namespace do_while_true;

const int N = 21;

int n;

ld p[N], f[2100000];

void solve() {
	for(int i = 1; i <= n; ++i) scanf("%lf", &p[i]);
	f[(1 << n)-1] = 0;
	for(int i = (1 << n)-2; ~i; --i) {
		ld s1 = 0, s2 = 0;
		for(int j = 1; j <= n; ++j)
			if(((1 << (j-1)) & i) == 0)
				s1 += p[j], s2 += f[i | (1 << (j-1))] * p[j];
		f[i] = (s2 + 1) / s1;
	}
	printf("%.4lf\n", f[0]);
}

signed main() {
	#ifndef ONLINE_JUDGE
	freopen("in.txt", "r", stdin);
	#endif
//	int T = 1;
//	read(T);
	while(~scanf("%d", &n)) solve();
	fclose(stdin);
	return 0;
}
posted @   do_while_true  阅读(39)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?

This blog has running: 1845 days 1 hours 33 minutes 55 seconds

点击右上角即可分享
微信分享提示