干了这桶冰红茶!【找规律】

本文探讨了如何通过动态规划解决计算一桶特定升数的冰红茶,通过每次喝1升、2升或3升来喝光的所有组合方案数量的问题。通过给出具体的例子和公式,解释了求解过程并提供了相应的代码实现。

E. 干了这桶冰红茶!

Time Limit: 1000ms
Memory Limit: 65536KB
64-bit integer IO format:  %lld      Java class name:  Main

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种方案。


它的规律就是f[a]=f[a-1]+[a-2]+[a-3];

代码在此

#include<stdio.h>
int a[35];
void dudu()
{a[0]=0;
a[1]=1;
a[2]=2;
a[3]=4;
    for(int i=4;i<=30;i++)
    {a[i]=a[i-1]+a[i-2]+a[i-3];

    }
}
int main()
{dudu();
int n;
scanf("%d",&n);
while(n--)
{int q;
    scanf("%d",&q);
    printf("%d\n",a[q]);
}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值