"NOIP 시뮬레이션"선물【상태 압축】【기대 DP】

Description
하천의 생일이 곧 다가온다.하천의 형식적인 남자친구인 계당은 하천에게 생일 선물을 사주려고 한다.상점 안에는 모두 하나의 선물이 있다.하천은 한 가지 선물을 받을 때마다 그에 상응하는 기쁨치 Wi(각 선물의 기쁨치는 중복 획득할 수 없음)를 받는다.매번 점원은 일정한 확률로 Pi(또는 선물을 내놓지 않음)에 따라 i종 선물을 꺼낸다.계당은 매번 점원이 내놓은 선물을 사들인다.모두가 알다시피 흰 털은 잘라도 검다.그래서 계당은 마지막 하천의 기쁨이 가능한 한 높기를 바란다.구하천의 마지막 가장 큰 기쁨치가 얼마인지, 하천이 이 기쁨치, 계당의 기대 구매 횟수를 구해보자.
Input
첫 번째 줄에는 N가지 선물이 있음을 나타내는 정수 N이 있다.다음 N행은 각 행에 실수 Pi와 정수 Wi를 하나씩 주어 i번째 선물이 꺼질 확률과 기쁨치를 얻을 수 있음을 나타낸다.
Output
첫 번째 줄의 정수는 얻을 수 있는 최대 기쁨치를 나타낸다.두 번째 줄에서 하나의 실수는 이 기쁨치를 얻는 기대 구매 횟수를 표시하고 소수 세 자리를 보류한다.
f[s] f[s] f[s]는 상태 ss의 물품을 샀다는 기대를 나타낸다. s′=s-3-2i, i∈s'=s-2^i, i∈s′=s-32i, i∈s
그래서 다음과 같다. f[s]=∑f[s′]∗p-3∑pf[s]=\rac{\sumf[s']*p-1}{\sump}f[s]=∑p∑f[s]𕓯p-1
#include 
#include 
#include 
#include 
#include 
#define db double
#define sg string
#define ll long long
#define rel(i,x,y) for(ll i=(x);i=(y);i--)
#define res(i,x) for(ll i=head[x];i;i=nxt[i])
using namespace std;

const ll N=20;
const ll Inf=1e18;
const ll Mod=1e9+7;
const db Eps=1e-10;

ll n,ans,all;
db f[1<

좋은 웹페이지 즐겨찾기