1. 程式人生 > >Codeforces Round #493 (Div. 2):D. Roman Digits

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;
}