「オイラープロジェクト381~390」の編集履歴(バックアップ)一覧に戻る
#include<stdio.h> //long doubleで精度が足らなかったらどうしよう、、、 long double memo6[25]={0},memo8[193]={0},memo12[2305]={0},memo20[46081]={0}; long double memo4[5]={0,1,1,1,1};//4つからスタート //一般化しないとこの問題は難しすぎるので抽象化して解く void calc(int d,int max,long double* multiMemo,long double* nextMemo){ //dはダイスの面数、maxはダイスの個数,multiMemo long double memo[46081]={0}; for(int i=1;i<=max;i++){ //動的計画法でさいころを転がす for(int j=max-d;j>=0;j--){ memo[j+d]+=memo[j]; } //i個転がした分をとりあえず次へ足す。 for(int i=1;i<=max;i++){ nextMemo[i]+=(memo[i]*multiMemo[i]); } } } int main(){ }