P1990 覆盖墙壁

题目链接:https://www.luogu.com.cn/problem/P1990?contestId=28768

在这里插入图片描述
在这里插入图片描述
一开始先打表找规律

n 0 1 2 3 4 5 n
覆盖方法 1 1 2 5 11 24 f[i-1] + f[i-2] + 2*sum[i-3]

emmm,无意中发现递推公式是 f [ n ] = f [ i 1 ] + f [ i 2 ] + 2 s u m [ i 3 ] = s u m [ i 1 ] + s u m [ i 3 ] f[n]=f[i-1]+f[i-2]+2*sum[i-3]=sum[i-1]+sum[i-3]

其中sum[i-3]表示前i-3项的前缀和

#include <iostream>
using namespace std;
const int N = 1e6 + 5;

int f[N] = {1, 1, 2, 5};
int sum[N] = {1, 2, 4, 9};

int main(void)
{
	int n;
	cin >> n;
	for (int i = 4; i <= n; i++){
		f[i] = (sum[i - 1] + sum[i - 3]) % 10000;
		sum[i] = (sum[i - 1] + f[i]) % 10000;
	}
	cout << f[n] << endl;
	
	return 0;
}
发布了221 篇原创文章 · 获赞 38 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_43772166/article/details/105409362