文章

84

粉丝

408

获赞

33

访问

872.1k

头像
骨牌铺方格(c++)
P1029 重庆大学机试题
发布于2020年3月24日 10:27
阅读数 10.3k

经分析,本题存在递推公式:dp[i] = dp[i-1] + dp[i-2] + dp[i-3];

初始值:dp[1] = 1, dp[2] = 2, dp[3] = 4;

注意使用数据类型long long

可以通过剪枝来降低时间复杂度

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int n;
	long long dp[5000];
	memset(dp, 0, sizeof(dp));
	dp[1] = 1, dp[2] = 2, dp[3] = 4;
	int index = 4;
	while (1) {
		cin >> n;
		if (n == 0)
			break;
		if (dp[n] == 0) {
			for (int i = index; i <= n; i++) {
				dp[i] = dp[i-1] + dp[i-2] + dp[i-3];
			}
			index = n + 1;
		}
		cout << dp[n] << endl;
	}
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发