o(╯□╰)odp

来源:互联网 发布:网络乌托邦 编辑:程序博客网 时间:2024/05/16 16:00

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
#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⊙)…

原创粉丝点击