Pagini recente » Cod sursa (job #2263374) | Cod sursa (job #231658) | Cod sursa (job #2154288) | Cod sursa (job #3120780) | Cod sursa (job #2940849)
#include <fstream>
#include <string>
using namespace std;
ifstream in ("pavare2.in");
ofstream out ("pavare2.out");
int dp[101][2][101][10001], v[10001];
void suma (int s[], int x[], int y[])
{
int t = 0, i;
for (i = 1; i <= x[0] || i <= y[0]; i++)
{
int aux = x[i] + y[i] + t;
s[i] = aux % 10;
t = aux / 10;
}
s[0] = i - 1;
if (t > 0)
{
s[++s[0]] = t;
}
}
int main ()
{
dp[1][0][1][0] = 1;
dp[1][0][1][1] = 1;
dp[1][1][1][0] = 1;
dp[1][1][1][1] = 1;
int n, a, b;
string aaaaaaa;
in >> n >> a >> b >> aaaaaaa;
for (int i = 1; i < n; i++)
{
for (int j = 0; j < 2; j++)
{
if (j == 0)
{
for (int k = 1; k < a; k++)
{
suma(dp[i + 1][j][k + 1], dp[i + 1][j][k + 1], dp[i][j][k]);
suma(dp[i + 1][1 - j][1], dp[i + 1][1 - j][1], dp[i][j][k]);
}
suma(dp[i + 1][1 - j][1], dp[i + 1][1 - j][1], dp[i][j][a]);
}
else
{
for (int k = 1; k < b; k++)
{
suma(dp[i + 1][j][k + 1], dp[i + 1][j][k + 1], dp[i][j][k]);
suma(dp[i + 1][1 - j][1], dp[i + 1][1 - j][1], dp[i][j][k]);
}
suma(dp[i + 1][1 - j][1], dp[i + 1][1 - j][1], dp[i][j][b]);
}
}
}
for (int k = 1; k <= a; k++)
{
suma(v, v, dp[n][0][k]);
}
for (int k = 1; k <= b; k++)
{
suma(v, v, dp[n][1][k]);
}
for (int i = v[0]; i > 0; i--)
{
out << v[i];
}
in.close();
out.close();
return 0;
}