MySoul


私信TA

用户名:18813155923

访问量:3557

签 名:

跟C语言网说拜拜了,转战洛谷去咯!

等  级
排  名 100
经  验 8540
参赛次数 0
文章发表 8
年  龄 18
在职情况 学生
学  校 北方工业大学
专  业 计算机科学与技术

  自我简介:

解题思路:
先求出N=1,2,3时的方案数。dp[i]=dp[i-1]+dp[i-2]+dp[i-3]。i从4开始,如果第i个坑不放,则第1到第i-1个坑可以在符合题意的情况下

随意放,即+dp[i-1];如果第i个坑放,当第i-1个坑不放时,第1到第i-2个坑可以在符合题意的情况下随意放,即+dp[i-2],当第i-1个坑放,第

i-2个坑不放(此时必须不放,因为不可能连续三个坑同时放)时,第1到i-3个坑可以在符合题意的情况下随意放,即+dp[i-3],这就是dp[i]的所有情况了

(因为第i个,i-1个,i-2个不可能同时放)。


注意事项:为了防止数值过大越界,应该把dp数组设为long long型。

参考代码:

#include <iostream>
using namespace std;
int main()
{
	long long dp[50]={0};
	dp[1]=2;dp[2]=4;dp[3]=7;
	for(int i=4;i<41;i++)dp[i]=dp[i-1]+dp[i-2]+dp[i-3]; 
	int n;
	while(cin>>n)cout<<dp[n]<<endl;
}


 

0.0分

23 人评分

  评论区

牛逼,十行,掌声
2022-05-23 18:46:23
此题的升级版,题号1191,大家掌握了这题可以去试试那个题。
2021-04-24 22:23:37
  • «
  • 1
  • »