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 }

浙公网安备 33010602011771号