Codeforces Round #493 (Div. 2):D. Roman Digits



题意(转换后):给你一个n,问在满足x+y+a+b=n的情况下,x+5y+10a+50b有多少种不同的结果

结论:当n≤11的时候直接暴力,n≥12满足F(i)=F(i-1)+49

思路:假设有这样道题:你有1元,5元,10元,50元纸币若干张,问你能组成多少种不同面值,你会发现只要能用9张纸币,那么就可以组成1~50中的任意一个面额(需要最多的是49=10+10+10+10+5+1+1+1+1刚好9张)


#include<stdio.h>
#define LL long long 
LL ans[15] = {0,4,10,20,35,56,83,116,155,198,244};
int main(void)
{
	int n;
	scanf("%d", &n);
	if(n<=10)
		printf("%I64d\n", ans[n]);
	else
		printf("%lld\n", ans[10]+(LL)(n-10)*49-1);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/jaihk662/article/details/80883827