o(╯□╰)o不知道怎么学好了,偷偷刷喵呜的博客,踩着前辈的脚印前进好了
2044 [没考虑long long 问题 wa了一次%>_<%]
#include<iostream>
#include<cstring>
using namespace std;
long long dp[52];
int main()
{
int n,a,b;
while(cin>>n)
{
while(n--)
{
memset(dp,0,sizeof(dp));
cin>>a>>b;
dp[a]=1;
dp[a+1]=1;
for(int i=a+2;i<=b;i++)
{
dp[i]=dp[i-1]+dp[i-2];
}
cout<<dp[b]<<endl;
}
}
return 0;
}
2045
#include<iostream>
#include<cstring>
using namespace std;
long long dp[52];
int main()
{
int n;
memset(dp,0,sizeof(dp));
dp[1]=3;
dp[2]=dp[3]=6;
for(int i=4;i<=50;i++)
dp[i]=dp[i-1]+dp[i-2]*2;
while(cin>>n)
{
cout<<dp[n]<<endl;
}
return 0;
}
2046[貌似假期的时候做过这种题啊,当时怎么想都想不明白,o(╯□╰)o]
#include<iostream>
#include<cstring>
using namespace std;
long long dp[52];
int main()
{
int n;
memset(dp,0,sizeof(dp));
dp[1]=1;
dp[2]=2;
for(int i=3;i<=50;i++)
dp[i]=dp[i-1]+dp[i-2];
while(cin>>n)
{
cout<<dp[n]<<endl;
}
return 0;
}
2047[看了喵呜的博客说,2047是可以由2046改编的,前一个也乘2就可以了]
#include<iostream>
#include<cstring>
using namespace std;
long long dp[42];
int main()
{
int n;
memset(dp,0,sizeof(dp));
dp[1]=3;
dp[2]=8;
for(int i=3;i<40;i++)
dp[i]=(dp[i-1]+dp[i-2])*2;
while(cin>>n)
{
cout<<dp[n]<<endl;
}
return 0;
}
2048[错排公式,写的时候在double和llf这里没注意,wa了一次]
当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推.
第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法;
第二步,放编号为k的元素,这时有两种情况⑴把它放到位置n,那么,对于剩下的n-1个元素,由于第k个元素放到了位置n,剩下n-2个元素就有M(n-2)种方法;⑵第k个元素不把它放到位置n,这时,对于这n-1个元素,有M(n-1)种方法;
综上得到
M(n)=(n-1)[M(n-2)+M(n-1)]
特殊地,M⑴=0,M⑵=1
2049[这题有点小bt]
2050[貌似具体数学里有这个。。。]
终于刷完了(⊙o⊙)…
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
long long dp[21];
int main()
{
int n,a;
long long sum;
dp[1]=0;
dp[2]=1;
for(int i=3;i<21;i++)
dp[i]=(i-1)*(dp[i-1]+dp[i-2]);
cin>>n;
while(n--)
{
cin>>a;
sum=1;
for(int i=1;i<=a;i++)
sum*=i;
double ans=dp[a]*100.0/sum;
printf("%.2llf%%\n",ans);
}
return 0;
}
2049[这题有点小bt]
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
long long dp[21],sum[21];
int main()
{
int n,m,t;
dp[1]=0;
dp[2]=1;
for(int i=3;i<21;i++)
dp[i]=(i-1)*(dp[i-1]+dp[i-2]);
sum[0]=sum[1]=1;
for(int i=2;i<=20;i++)
sum[i]=i*sum[i-1];
cin>>t;
while(t--)
{
cin>>n>>m;
cout<<sum[n]/sum[m]/sum[n-m]*dp[m]<<endl;
}
return 0;
}
2050[貌似具体数学里有这个。。。]
#include<iostream>
using namespace std;
long long d;
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
d=n*(2*n-1)+1;
cout<<d<<endl;
}
return 0;
}
终于刷完了(⊙o⊙)…