骰子求和-lintcode
http://www.lintcode.com/zh-cn/problem/dices-sum/
每一次求概率都能利用上一次求得的概率
#include "map"
#define pmap map<int, double>
class Solution {
public:
/**
* @param n an integer
* @return a list of pair<sum, probability>
*/
vector<pair<int, double>> dicesSum(int n) {
// Write your code here
float bace = 1.0 / 6.0;
pmap resultmap;
vector<pair<int, double>> result;
for(int i = 1; i <= n; ++i){
if(i == 1){
resultmap = {{1, bace}, {2, bace}, {3, bace}, {4, bace}, {5, bace}, {6, bace}};
}else{
pmap newmap;
for(int j = 1; j <= 6; ++j){
for(auto &m : resultmap){
float newp = m.second * bace;
int a = m.first + j;
newmap[a] += newp;
}
}
resultmap = newmap;
}
}
for(auto &m : resultmap){
result.push_back({m.first, m.second});
}
return result;
}
};