100가지 동적 계획 – 33 HDU 5602 Black Jack 게임 DP?이런 스타일은 안 해봤어요.
두 개의 그룹을 열어 기억화 검색을 진행해야 합니다.
사실 일부 원인도 제목이 명확하게 묘사되지 않았기 때문이다(오,사실은 자신이 크기를 정확하게 보지 못한 규칙이다)
규칙은 우선 한가한 사람이 패를 부르고, 끊임없이 패를 부르고, 그 다음에 농가가 패를 부르고, 끊임없이 패를 부르고, 농가가 패를 부르지 않을 때, 크기를 비교하는 것이다.
텔레비전에서 봤던 그런 농사꾼들이 왔다갔다 번갈아 가며 카드를 부르는 게 아니라...
규칙을 정확하게 이해하는 상황에서 전체는 두 라운드밖에 없다. 하나는 한가한 사람이 카드를 부르는 것이다. 한가한 사람은 자신의 승률이 가장 높고 농가가 카드를 부를 차례가 되면 농가는 한가한 사람의 승률을 가장 낮게 한다.
정의 상태 dp[0][i][j]는 한가 i점, 농가 j점을 나타낸다. 이때는 한가 조작의 한가 승률이다.
dp[1][i][j]는 한가 i점, 농가 j점을 나타낸다. 이때는 농가가 조작하는 농가의 승률이다.
상태 이동 방정식은 코드 안에서 보세요. 주의해야 할 것은 농가가 조작할 때 농가가 카드를 부르지 않으면 크기를 비교하는 부분에 들어갑니다.
바둑 DP, 사실 자세하게 분석하면, 변화도 그리 크지 않고, 단지 방법을 바꾸었을 뿐이다
#include
#include
#include
#include
#include
using namespace std;
const int maxm=35;
inline int p(char c){return (c=='A')?1:((isdigit(c)?c-'0':10));}
bool vis[2][maxm][maxm];
double dp[2][maxm][maxm],dfs0(int a,int b),dfs1(int a,int b);
int times;
string str;
int main(){
ios_base::sync_with_stdio(false);
cin>>times;
while(times--){
cin>>str;
cout<0.5?"YES
":"NO
");
}
return 0;
}
double dfs0(int a, int b){
if(a>21)
return 0;
else if(vis[0][a][b])
return dp[0][a][b];
vis[0][a][b]=true;
dp[0][a][b]=dfs1(a,b);
double tmp=0;
for(int i=1;i<10;++i)
tmp+=dfs0(a+i,b)/13;
tmp+=dfs0(a+10,b)*4/13;
return dp[0][a][b]=max(dp[0][a][b],tmp);
}
double dfs1(int a,int b){
if(b>21)
return 1;
else if(vis[1][a][b])
return dp[1][a][b];
vis[1][a][b]=true;
dp[1][a][b]=a>b;
double tmp=0;
for(int i=1;i<10;++i)
tmp+=dfs1(a,b+i)/13;
tmp+=dfs1(a,b+10)*4/13;
return dp[1][a][b]=min(tmp,dp[1][a][b]);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
100가지 동적 계획 – 33 HDU 5602 Black Jack 게임 DP?이런 스타일은 안 해봤어요.바둑 이론 문제를 풀었고, 확률 DP 문제를 풀었지만, 이런 문제를 본 적이 없다. 두 개의 그룹을 열어 기억화 검색을 진행해야 합니다. 사실 일부 원인도 제목이 명확하게 묘사되지 않았기 때문이다(오,사실은 자신이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.