描述 Description
贝西喜欢棋盘游戏和角色扮演类游戏所以她说服 Farmer John 把她带到玩具店,在那里,她购买了三个不同的骰子,这三个质量均匀的骰子,分别有 S1,S2,S3 个面。(2 <= S1 <= 20; 2 <= S2 <= 20; 2 <= S3 <= 40). 贝西掷啊掷啊掷啊,想要知道出现几率最大的和是多少。 问题给出三个骰子的面数,让你求出出现几率最大的和是多少。如果有很多种和出现的几率相同,那么就输出小的那一个。
输入格式 InputFormat
第一行:三个由空格隔开的整数:s1,s2,s3.
输出格式 OutputFormat
第一行:所要求的解.
样例输入 SampleInput
20 20 40
样例输出 SampleOutput
41
来源 Source
资格赛
代码 Code
f[i][j] 表示用前 i 个骰子出现和为 j 的次数 (?).
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int f[4][100];
int i,j,t,n,m,l,r,k,z,y,x,ans;
int main()
{
scanf("%d%d%d",&x,&y,&z);
for (i=1;i<=x;i++) f[1][i]=1;
for (i=1;i<=x+y;i++) for (j=1;j<=y;j++)
{
if (i>j) f[2][i]+=f[1][i-j];
}
for (i=1;i<=x+y+z;i++) for (j=1;j<=z;j++)
{
if (i>j) f[3][i]+=f[2][i-j];
}
ans=0;
for (i=1;i<=x+y+z;i++) if (f[3][ans]<f[3][i]) ans=i;
printf("%dn",ans);
return 0;
}