/*
问题描述:
货币发行问题
假定你可以发行面值为1,3,5,7,9....的货币
现在每天你要交一块钱给房东,房东一开始没有钱(按天结算)
当然房东有钱以后可以找你钱
每天都不能有拖欠
现在你要交31天房租,问最少要发行多少张货币?
*/
/*
问题分析:
1. 我们只在交易无法继续进行下去的时候发行货币
2. 每次发行货币我们都发行面值尽可能大的货币
假设第N天已经发行的货币无法继续交易下去,则当天房东手上有(N-1)RMB,此时我们发行N(如果N为单数)或者(N-1)(N为偶数),就能继续交易下去.
假设第N天要发行的人民币为f(N),第N天前已经发行的人民币总额为sum(N),有
f(N) = 0 (sum(N) >= N);
= N (sum(N) < N 且 N为奇数)
= N - 1 (sum(N) < N 且 N为偶数)
Sum(N) = F(1) + F(2) + ... + F(N-1);
要发行的货币张数是F(N)非0的个数
*/
int CountOfRMB(int N)
{
int sum = 0;
int count = 0;
for(int i = 1; i <= N; ++i)
{
if(sum < i)
{
int val = i - 1 + (i&1);
//cout<< val<<endl;
sum += val;
++count;
}
}
return count;
}
int main()
{
int N =0;
while(cin>>N)
{
cout<< CountOfRMB(N);
}
return 0;
}
[动态规划]货币发行问题
最新推荐文章于 2021-10-13 14:25:24 发布