您的位置:首页 > 其它

核电站问题(递推)

2016-06-21 17:37 281 查看
记f[i]为第i个坑时的方案数。f[0]=1,因为没有坑只有一种方案。

很明显每个坑有两种决策:放,或者不放。

所以f[i] = f[i - 1] * 2。

但只对于i < m成立,因为当i >= m时就要考虑爆炸的问题了。

所以当i > m时,f[i] = f[i - 1] * 2 - f[i - m - 1],这里-f[i - m - 1]代表不能放的方案数。
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;

ll n,m,f[100];
int main()
{
scanf("%lld%lld",&n,&m);
f[0]=1;
for (int i=1;i<=n;i++)
{
f[i]=f[i-1]*2;
if (i-m-1>=0) f[i]-=f[i-m-1];
else if (i-m-1==-1) f[i]-=1;
}
printf("%lld",f
);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: