7.20做题记录

1.集合的划分

 1 #include <bits/stdc++.h>
 2 #define int long long
 3 using namespace std;
 4 int ss(int x,int y)
 5 {
 6     if(x<y||y==0)
 7         return 0;
 8     if(y==1||x==y)
 9         return 1;
10     return ss(x-1,y-1)+y*ss(x-1,y);
11 }
12 signed main()
13 {
14     int n,k;
15     cin>>n>>k;
16     cout<<ss(n,k);
17     return 0;
18 }

2.爬楼梯

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int ss(int x)
 4 {
 5     if(x==0 || x==1)
 6         return 1;
 7     return ss(x-1)+ss(x-2);
 8 }
 9 int main()
10 {
11     int n;
12     while(cin>>n)
13         cout<<ss(n)<<endl;
14     return 0;
15 }

 

3.数的计数

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int f[1005];
 4 int ss(int x)
 5 {
 6     int s=1;
 7     if(x==1)
 8         return 1;
 9     if(f[x]!=0)
10     return f[x];
11     for(int i=1;i<=x/2;i++)
12         s+=ss(i);
13     f[x]=s;
14     return s;
15 }
16 int main()
17 {
18     ios::sync_with_stdio(false);
19     int n;
20     cin>>n;
21     cout<<ss(n); 
22     return 0;
23 }

4.忠诚

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int f[200010][50],logn[200010]={-1}; 
 4 int main()
 5 {
 6     int n,m;
 7     cin>>n>>m;
 8     for(int i=1;i<=n;i++)
 9     {
10         cin>>f[i][0];
11         logn[i]=logn[i/2]+1;
12     }
13     for(int j=1;j<=logn[n];j++)
14         for(int i=1;i<=n-(1<<j)+1;i++)
15             f[i][j]=min(f[i][j-1],f[i+(1<<(j-1))][j-1]);
16     while(m--)
17     {
18         int x,y;
19         cin>>x>>y;
20         int k=logn[y-x+1];
21         cout<<min(f[x][k],f[y-(1<<k)+1][k])<<' ';
22     }
23      return 0;
24 }

 

posted @ 2023-07-21 09:29  wyh0721  阅读(29)  评论(0)    收藏  举报