我写的2b程序
问题: 一个六个点的色子 ,随机扔十次,总点数和为50,问可能的情况有多少种?
算法逻辑悲剧的我,写了一个特2b的程序,用了十个for循环嵌套遍历可能的结果,结果虽然出来了,是85233 种,但相同点数不同出现次序的这种情况没有被排除掉。 越看自己的程序,感觉越2b,十个for循环啊,十个!!!!敲的手都疼了。
求懂的指点下,我不要作2b程序猿!!!!!
[解决办法]
这个明显可以深搜啊。
就当作伪代码吧,没有运行,大概意思就是这样。
直接dps(0)就行了
- C/C++ code
int sum = 0,cnt = 0;dps(int n){ if(n == 10 && sum == 50) { cnt ++; return; } for(int i = 1; i < 6; ++ i) { if(sum > 50) return; else { sum += i; dps(n + 1); sum -= i; } }}
[解决办法]
x骰子, 和等於n
DP(x, n)=DP(x-1, n-1)+DP(x-1, n-2)+DP(x-1, n-3)+DP(x-1, n-4)+DP(x-1, n-5)+DP(x-1, n-6)
界件就不了.