A - 超级楼梯
题解:
斐波那契数列
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dp[100]={0};
ll dfs(int x){
if(x<0) return 0;
if(dp[x]!=-1){
return dp[x];
}
ll ans;
ans=dfs(x-1)+dfs(x-2);
dp[x]=ans;
return ans;
}
int main()
{
memset(dp,-1,sizeof(dp));
dp[0]=dp[1]=0;
dp[2]=1;
dp[3]=2;
int T;
scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
ll ans=dfs(n);
printf("%lld\n",ans);
}
return 0;
}
B - 不容易系列之二
题解:
DP[ i ] = ( DP[ i -1 ] -1 )*2;
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dp[40]={3};
ll dfs(int x){
if(dp[x]!=0){
return dp[x];
}
ll ans;
ans=(dfs(x-1)-1)*2;
dp[x]=ans;
return ans;
}
int main()
{
ll T=dfs(30);
scanf("%lld",&T);
while(T--){
int n;
scanf("%d",&n);
ll ans=dp[n];
printf("%lld\n",dp[n]);
}
return 0;
}
C - 密码
题解:直接模拟即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dp[40]={3};
ll dfs(int x){
if(dp[x]!=0){
return dp[x];
}
ll ans;
ans=(dfs(x-1)-1)*2;
dp[x]=ans;
return ans;
}
int main()
{
ll T=dfs(30);
scanf("%lld",&T);
while(T--){
int n;
scanf("%d",&n);
ll ans=dp[n];
printf("%lld\n",dp[n]);
}
return 0;
}
D - 一只小蜜蜂...
题解:斐波那契数列
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dp[100];
ll dfs(int x){
if(x<0)return 0;
if(dp[x]!=-1){
return dp[x];
}
ll ans=dfs(x-1)+dfs(x-2);
dp[x]=ans;
return ans;
}
int main()
{
int T;
memset(dp,-1,sizeof(dp));
dp[0]=0;
dp[1]=1;
dp[2]=2;
T=dfs(50);
scanf("%d",&T);
while(T--){
int a,b;
scanf("%d%d",&a,&b);
int n=b-a;
ll ans=dfs(n);
printf("%lld\n",ans);
}
return 0;
}
E - 不容易系列之(3)—— LELE的RPG难题
题解:dp[ i ] = dp [ i - 1 ] +dp[ i -2 ] *2
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dp[55]={0};
int main()
{
int n;
dp[1]=3,dp[2]=6,dp[3]=6;
for(int i=4;i<=50;i++){
dp[i]=dp[i-2]*2+dp[i-1];
}
while(~scanf("%d",&n)){
printf("%lld\n",dp[n]);
}
return 0;
}
F - 骨牌铺方格
题解:斐波那契数列
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dp[100];
ll dfs(int x){
if(x<0)return 0;
if(dp[x]!=-1)return dp[x];
ll ans=dfs(x-1)+dfs(x-2);
dp[x]=ans;
return ans;
}
int main()
{
memset(dp,-1,sizeof(dp));
int n;
dp[1]=1;
dp[2]=2;
dp[3]=3;
while(~scanf("%d",&n)){
ll ans=dfs(n);
printf("%lld\n",ans);
}
return 0;
}
G - 阿牛的EOF牛肉串
题解