ACM 趣题求解

僵尸男孩 2014-02-24 04:30:36
BNUCIST的HWQ大神特别钟爱冰红茶这种神棍的饮料,有一天打Dota暴虐他寝室的WL后,决定大喝一顿庆祝一下。他决定用一种神棍的方式来喝冰红茶,那就是每口只喝1升,或者2升,或者3升(PS:HWQ大神真的能喝这么多= =)。爱思考的HWQ突然想知道,对于一桶整数升的冰红茶,他可以有多少种方案喝光,但似乎他不能马上想出解决的办法,纠结的他不知道答案他就喝不下去了。聪明的你快帮帮他吧。
Input
输入一个整数T,代表数据组数。
对于每一组数据,输入一个整数N,1<=N<=30,表示这桶冰红茶有N升。

Output
对于每个N,输出一个整数,代表方案数。

Sample Input
1
3

Sample Output
4
Hint
对于样例,3升的冰红茶,他可以(1)每次喝1升,连喝3口;(2)第一口喝1升,第二口喝2升;(3)第一口喝2升,第二口喝1升;(4)一口就喝掉3升。所以共有4种方案。

求解 谢谢各位
...全文
259 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
堂风 2014-02-25
  • 打赏
  • 举报
回复
某人攀登天梯,有时一步上1级,有时一步上2级,高兴了还一步跨上3级。 现在求登上n级阶梯,共有多少种不同的走法? 1级阶梯,只有1种走法。 2级阶梯,2种走法,可以每步上1级,也可以一步上2级。 3级阶梯有4种走法。可以每步上1级;可以先上1级再一步上2级;可以先一步上2级再上1级;可以一步上3级。 4级阶梯共7种走法。可以先上1级,在第1级基础上再向上走3级,有4种走法;可以先一步上2级,在第2级基础上再向上走2级,有2种走法;可以先一步上3级,在第3级基础上再向上走1级,有1种走法。 …… n级阶梯共有m种走法。因为可以先上n-3级,在第n-3级基础上再向上一步走3级;可以先上n-2级,在第n-2级基础上再向上一步走2级;可以先上n-1级,在第n-1级基础上再向上一步走1级。 输入样例: 输入:4 输出:7 输入:10 输出:274 code 1 #include<iostream.h> 2 3 int main(){ 4 long long num[73]; 5 int i,n; 6 for(num[0]=num[1]=1,num[2]=2,i=3;i<73;i++){ 7 num[i]=num[i-1]+num[i-2]+num[i-3]; 8 } 9 while(std::cin>>n)std::cout<<num[n]<<std::endl; 10 return 0; 11 } 给分吧
  • 打赏
  • 举报
回复
这个和超级台阶的思路是一样的,简单的动态规划问题。
  • 打赏
  • 举报
回复
引用 10 楼 FancyMouse 的回复:
[quote=引用 6 楼 misakamm 的回复:] [quote=引用 5 楼 lin5161678 的回复:] [quote=引用 1 楼 misakamm 的回复:] dp(听说最少六字)
以加各种格式[/quote] 没有xsk表情和泡泡表情太遗憾/xsk[/quote] [/quote]你好,球关注,球勾搭。
  • 打赏
  • 举报
回复
引用 10 楼 FancyMouse 的回复:
[quote=引用 6 楼 misakamm 的回复:]
[quote=引用 5 楼 lin5161678 的回复:]
[quote=引用 1 楼 misakamm 的回复:]
dp(听说最少六字)

以加各种格式[/quote]
没有xsk表情和泡泡表情太遗憾/xsk[/quote]
[/quote]
FancyMouse 2014-02-24
  • 打赏
  • 举报
回复
引用 6 楼 misakamm 的回复:
[quote=引用 5 楼 lin5161678 的回复:]
[quote=引用 1 楼 misakamm 的回复:]
dp(听说最少六字)

以加各种格式[/quote]
没有xsk表情和泡泡表情太遗憾/xsk[/quote]
AndyStevens 2014-02-24
  • 打赏
  • 举报
回复
引用 8 楼 u011488256 的回复:
[quote=引用 2 楼 Automation_dmu 的回复:] 设n升的次数为f(n),可列出递归式: f(n) = f(n-1)+f(n-2)+f(n-3); (n>0) 1 ; (n=0) 0 ; (n<0) 实现上可以做张表记录f(n)的值避免递归时计算重复子问题。
我想问的是 为什么n 等于前面3个数相加?[/quote]动态规划的方法分解问题: n升,第一口喝掉1升,剩下n-1升,可以把n-1升看成一个新问题,它的解是f(n-1);2、3升同理。 所以f(n)= f(第一口喝掉1升的情况)+f(第一口喝掉2升的情况)+f(第一口喝掉3升的情况) = f(n-1)+f(n-2)+f(n-3);
僵尸男孩 2014-02-24
  • 打赏
  • 举报
回复
引用 2 楼 Automation_dmu 的回复:
设n升的次数为f(n),可列出递归式: f(n) = f(n-1)+f(n-2)+f(n-3); (n>0) 1 ; (n=0) 0 ; (n<0) 实现上可以做张表记录f(n)的值避免递归时计算重复子问题。
我想问的是 为什么n 等于前面3个数相加?
僵尸男孩 2014-02-24
  • 打赏
  • 举报
回复
引用 6 楼 misakamm 的回复:
[quote=引用 5 楼 lin5161678 的回复:] [quote=引用 1 楼 misakamm 的回复:] dp(听说最少六字)
以加各种格式[/quote] 没有xsk表情和泡泡表情太遗憾/xsk[/quote] dp 是什么 ··其实程序知道 只是不知道为什么这么做
  • 打赏
  • 举报
回复
引用 5 楼 lin5161678 的回复:
[quote=引用 1 楼 misakamm 的回复:] dp(听说最少六字)
以加各种格式[/quote] 没有xsk表情和泡泡表情太遗憾/xsk
lin5161678 2014-02-24
  • 打赏
  • 举报
回复
引用 1 楼 misakamm 的回复:
dp(听说最少六字)
以加各种格式
熊熊大叔 2014-02-24
  • 打赏
  • 举报
回复
一个简单的递归 f(n) = f(n-1) + f(n-2) + f(n-3) 初始条件 f(1)=1, f(2)=2, f(3)=4
nice_cxf 2014-02-24
  • 打赏
  • 举报
回复
变形斐波拿契数列30不大,递归+大数应该就可以?
AndyStevens 2014-02-24
  • 打赏
  • 举报
回复
设n升的次数为f(n),可列出递归式: f(n) = f(n-1)+f(n-2)+f(n-3); (n>0) 1 ; (n=0) 0 ; (n<0) 实现上可以做张表记录f(n)的值避免递归时计算重复子问题。
  • 打赏
  • 举报
回复
dp(听说最少六字)

69,337

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧