题意
四个罗马数字'I','V','X','L'分别表示1,5,10,50,问用这四个罗马数字组成一个长度为n的串能够表示多少个数字?
“XI”和“IX”相等都表示的是11。
题解
当时没做出来,后来补的。暴力计算前面一小部分数据,可以发现从11往后是等差数列,公差为49。注意开long long即可
AC代码:
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 505;
const int a[12] = {0,4,10,20,35,56,83,116,155,198,244,292};
long long n, ans;
int main()
{
scanf("%lld", &n);
if (n <= 11) ans = a[n];
else ans = a[11]+(n-11)*49;
printf("%lld", ans);
return 0;
}
打表程序:
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 505;
set<int> s, t;
int main()
{
s.insert(1); s.insert(5); s.insert(10); s.insert(50);
printf("1 4\n");
for (int i = 2; i <= 20; i++)
{
t.clear();
for (auto i: s)
{
t.insert(i+1); t.insert(i+5); t.insert(i+10); t.insert(i+50);
}
s = t;
printf("%d %d\n", i, s.size());
}
return 0;
}