程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> BZOJ 3029 守衛者的挑戰 期望DP

BZOJ 3029 守衛者的挑戰 期望DP

編輯:關於C++

題目大意:給定n個事件,第i個事件發生的概率為pi,收益為ai,初始收益為k,求n個事件之後發生的事件數>=l且收益>=0的概率

令f[i][j][k]表示第i個事件進行後已經發生了j個事件且當前受益為k的概率

MB破輸入法打兩行字錯了十多遍

第三維好大- - 不會爆?

實際上第三維大於n就沒有意義了 因為收益大於n時一定不會扣到負數 因此將第三維大於n的狀態全都存到n上即可

時間復雜度O(n^3)

卡內存差評

#include 
#include 
#include 
#include 
#define M 201
using namespace std;
int n,l,k;
int score[M];
double possibility[M],ans;
class abcd{
private:
	double mempool[M<<1];
public:
	double& operator [] (int x)
	{
		if(x>=n) x=n;
		if(x<=-n) x=-n;
		return mempool[x+200];
	}
}f[M][M];
//f[i][j][k]表示第i個點時贏了j場得分為k的概率
int main()
{
	int i,j,k,x;
	cin>>n>>l>>::k;
	for(i=1;i<=n;i++)
	{
		scanf("%d",&x);
		possibility[i]=x/100.0;
	}
	for(i=1;i<=n;i++)
		scanf("%d",&score[i]);
	f[0][0][::k]=1;
	for(i=0;i

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved