zoukankan      html  css  js  c++  java
  • 【编程练习2】

    B 窗前的树

    1. #include <iostream>
    2. #define MAXSIZE 10005
    3. using namespace std;
    4. int main()
    5. {
    6. int L,M;
    7. int t[MAXSIZE]={0};
    8. while(cin>>L>>M)
    9. {
    10. int lo,hi;
    11. while(M--)
    12. {
    13. cin>>lo>>hi;
    14. for(int i=lo;i<=hi;i++)
    15. t[i]=1;
    16. }
    17. int count=0;
    18. for(int j=0;j<MAXSIZE;j++)
    19. {
    20. if(t[j]==1)count++;
    21. }
    22. cout<<L-count+1<<endl;
    23. for(int k=0;k<MAXSIZE;k++)
    24. {
    25. t[k]=0;
    26. }
    27. }
    28. return 0;
    29. }

    C 一个递归方程

    1. (递归版)超时、超内存
    2. #include <iostream>
    3. using namespace std;
    4. long f(int A,int B,int n)
    5. {
    6. //long f=1,g=1;//定义fun(0),和fun(1)
    7. if (n==1||n==2)
    8. {
    9. return 1;
    10. }
    11. else return (A*f(A,B,n-1)+B*f(A,B,n-2))%7;
    12. }
    13. int main()
    14. {
    15. int A,B,n;
    16. while((cin>>A>>B>>n)&&!(A==0&&B==0&&n==0))
    17. {
    18. for(int i=1;i<=n;i++)
    19. cout<<"f("<<i<<")= "<<f(A,B,i)<<endl;
    20. }
    21. return 0;
    22. }
    1. (迭代版)
    2. 尝试用迭代代替递归,而最终理论和实践证明不可行
    3. #include <iostream>
    4. using namespace std;
    5. __int64 f_I(int A,int B,int n)
    6. {
    7. __int64 f=1,g=1;//定义fun(0),和fun(1)
    8. while(2<n--)
    9. {
    10. g=(A*g+B*f)%7;
    11. f=((g+A*f)/B);
    12. cout<<"g="<<g<<", f="<<f<<endl;
    13. }
    14. return g;
    15. }
    16. int main()
    17. {
    18. int A,B,n;
    19. while((cin>>A>>B>>n)&&!(A==0&&B==0&&n==0))
    20. {
    21. if(n<=0)break;
    22. for(int i=1;i<n;i++)
    23. {cout<<"f("<<i<<")= "<<f_I(A,B,i)<<endl;}
    24. }
    25. return 0;
    26. }

    !(找规律)[
    ]

    1. #include <iostream>
    2. #define MSIZE 100
    3. using namespace std;
    4. int main()
    5. {
    6. int A,B,n,i;
    7. int M[MSIZE];
    8. M[1]=1;M[2]=1;
    9. while((cin>>A>>B>>n)&&!(A==0&&B==0&&n==0))
    10. {
    11. //cout<<"M["<<1<<"]= "<<M[1]<<endl;
    12. //cout<<"M["<<2<<"]= "<<M[2]<<endl;
    13. for(i=3;i<MSIZE;i++)
    14. {
    15. M[i]=(A*M[i-1]+B*M[i-2])%7;
    16. //cout<<"M["<<i<<"]= "<<M[i]<<endl;
    17. if (M[i]==1&&M[i-1]==1)
    18. {
    19. break;
    20. }
    21. }
    22. int index=n%(i-2);
    23. if(index==0)cout<<M[i-2]<<endl;
    24. else cout<<M[index]<<endl;
    25. }
    26. return 0;
    27. }

    最长字段和

    1. (简易版)
    2. #include <iostream>
    3. #include <cstdio>
    4. #include "maxsum.h"
    5. #define MAXN 10001
    6. #define GET_LEN(ARRAY,LEN) {LEN = (sizeof(ARRAY) / sizeof(ARRAY[0]));}
    7. int a[MAXN];
    8. int maxsum(int );
    9. int maxsum(int ,int &a,int &b);
    10. using namespace std;
    11. int main()
    12. {
    13. int T,i;
    14. cin>>T;
    15. int n;
    16. int lo=0,hi=0;
    17. for(int k=1;k<=T;k++)
    18. {
    19. cin>>n;
    20. for(i=0;i<n;i++)
    21. {
    22. cin>>a[i];
    23. }
    24. //cout<<maxsum(n)<<endl;
    25. cout<<"Case "<<k<<":"<<endl;
    26. cout<<maxsum(n,lo,hi)<<" "<<lo+1<<" "<<hi+1<<" ";
    27. for(i=0;i<n;i++)
    28. {
    29. a[i]=0;
    30. }
    31. lo=0,hi=0;
    32. }
    33. return 0;
    34. }
    35. int maxsum(int n,int &besti,int &bestj){
    36. int sum=0;
    37. int b=0;
    38. int begin=0;
    39. for(int i=0;i<=n;i++){
    40. if(b>0)b+=a[i];
    41. else {
    42. b=a[i];
    43. begin=i;
    44. }
    45. if(b>sum)
    46. {
    47. sum=b;
    48. besti=begin;
    49. bestj=i;
    50. }
    51. }
    52. return sum;
    53. }
    54. /*
    55. int maxsum(int n)
    56. {
    57. int ma=0;
    58. int sum=0;
    59. int lo,hi;
    60. for(int i=0;i<=n;i++){
    61. if(sum>0)
    62. {
    63. sum+=a[i];
    64. }
    65. else
    66. {
    67. sum=a[i];
    68. }
    69. if(sum>ma)
    70. {
    71. ma=sum;
    72. }
    73. }
    74. return sum;
    75. }*/
    1. (动态规划版)
    2. #include <iostream>
    3. #include <cstdio>
    4. //#include "maxsum.h"
    5. #define MAXN 10001
    6. #define GET_LEN(ARRAY,LEN) {LEN = (sizeof(ARRAY) / sizeof(ARRAY[0]));}
    7. int a[MAXN];
    8. int maxsum(int );
    9. int maxsum(int ,int &a,int &b);
    10. using namespace std;
    11. int main()
    12. {
    13. int T,i;
    14. cin>>T;
    15. int n;
    16. int lo=0,hi=0;
    17. for(int k=1;k<=T;k++)
    18. {
    19. cin>>n;
    20. for(i=0;i<n;i++)
    21. {
    22. cin>>a[i];
    23. }
    24. //cout<<maxsum(n)<<endl;
    25. cout<<"Case "<<k<<":"<<endl;
    26. cout<<maxsum(n,lo,hi)<<" ";cout<<lo+1<<" "<<hi+1<<" ";
    27. for(i=0;i<n;i++)
    28. {
    29. a[i]=0;
    30. }
    31. lo=0,hi=0;
    32. }
    33. return 0;
    34. }
    35. int maxsum(int n,int &besti,int &bestj){
    36. int sum=0;
    37. int b=0;
    38. int begin=0;
    39. for(int i=0;i<=n;i++){
    40. if(b>0){b+=a[i];}
    41. else {//b<=0
    42. b=a[i];
    43. if(b<0)
    44. begin=i;
    45. //cout<<"begin="<<begin<<", b="<<b<<endl;
    46. }
    47. if(b>sum)
    48. {
    49. sum=b;
    50. besti=begin;
    51. bestj=i;
    52. //cout<<"lo="<<besti<<", hi="<<bestj<<endl;
    53. }
    54. }
    55. return sum;
    56. }
    57. /*
    58. int maxsum(int n)
    59. {
    60. int ma=0;
    61. int sum=0;
    62. int lo,hi;
    63. for(int i=0;i<=n;i++){
    64. if(sum>0)
    65. {
    66. sum+=a[i];
    67. }
    68. else
    69. {
    70. sum=a[i];
    71. }
    72. if(sum>ma)
    73. {
    74. ma=sum;
    75. }
    76. }
    77. return sum;
    78. }*/
    1. (傻瓜都懂法)
    2. #include <iostream>
    3. using namespace std;
    4. #define MAXN 100005
    5. int main()
    6. {
    7. int T,n,i;
    8. int a[MAXN],index[MAXN];
    9. int max,lo,hi,ca;
    10. cin>>T;
    11. for(ca=1;ca<=T;ca++)
    12. {
    13. cin>>n;
    14. for(i=1; i<=n; i++)
    15. {
    16. cin>>a[i];
    17. index[i]=i;
    18. }
    19. max=a[1];
    20. lo=1;
    21. hi=1;
    22. for(i=2; i<=n; i++)
    23. {
    24. if(a[i-1]>=0)
    25. {
    26. a[i]+=a[i-1];
    27. index[i]=index[i-1];
    28. }
    29. if(a[i]>max)
    30. {
    31. max=a[i];
    32. hi=i;
    33. }
    34. }
    35. cout<<"Case "<<ca<<":"<<endl;
    36. cout<<max<<" "<<index[hi]<<" "<<hi<<" ";
    37. }
    38. return 0;
    39. }

    (AC)

    1. #include <iostream>
    2. #include <string.h>
    3. #define MAXN 10005
    4. #define GET_LEN(ARRAY,LEN) {LEN = (sizeof(ARRAY) / sizeof(ARRAY[0]));}
    5. using namespace std;
    6. char ch[MAXN];
    7. int dp[MAXN];
    8. int main()
    9. {
    10. int T;cin>>T;while(T--)
    11. {
    12. cin>>ch;
    13. int len=strlen(ch);
    14. //GET_LEN(ch,len)
    15. //cout<<"len="<<len<<endl;
    16. for(int i=0;i<len;i++){
    17. dp[i]=1;//平凡的情况,最优解为1
    18. }
    19. for(int i=len-2;i>=0;i--){//定义两个游标i,j
    20. for(int j=i+1;j<len;j++){
    21. if(ch[i]>ch[j]&&dp[i]<dp[j]+1) //>表示降序,<表示升序
    22. {
    23. dp[i]=dp[j]+1;//每当遇见一个就加1
    24. }
    25. }
    26. }
    27. int max=0;
    28. for(int k=0;k<len;k++)
    29. {
    30. if(max<dp[k])
    31. {
    32. max=dp[k];
    33. }
    34. }
    35. cout<<max<<endl;
    36. }
    37. return 0;
    38. }

    E Card move

    1. (AC)
    2. #include <iostream>
    3. #include <string.h>
    4. #define MAXN 10005
    5. #define GET_LEN(ARRAY,LEN) {LEN = (sizeof(ARRAY) / sizeof(ARRAY[0]));}
    6. using namespace std;
    7. int ch[MAXN];
    8. int dp[MAXN];
    9. int main()
    10. {
    11. int i,j,k;
    12. int T;cin>>T;while(T--)
    13. {
    14. int len=0;
    15. cin>>len;
    16. for(i=0;i<len;i++)
    17. cin>>ch[i];
    18. //int len=strlen(ch);
    19. //GET_LEN(ch,len)
    20. //cout<<"len="<<len<<endl;
    21. for(k=0;k<len;k++){
    22. dp[k]=1;//平凡的情况,最优解为1
    23. }
    24. for(i=len-2;i>=0;i--){//定义两个游标i,j
    25. for(j=i+1;j<len;j++){
    26. if(!(ch[i]>ch[j])&&dp[i]<dp[j]+1) //>表示降序,<表示升序
    27. {
    28. dp[i]=dp[j]+1;//每当遇见一个就加1
    29. }
    30. }
    31. }
    32. int max=0;
    33. for(k=0;k<len;k++)
    34. {
    35. //cout<<"dp["<<k<<"]="<<dp[k]<<endl;
    36. if(max<dp[k])
    37. {
    38. max=dp[k];
    39. }
    40. }
    41. //cout<<max<<endl;
    42. //cout<<"move :"<<len-max<<" times"<<endl;
    43. cout<<len-max<<endl;
    44. }
    45. return 0;
    46. }

    H

    1. (动态规划后进行分割累加版) WA
    2. #include <iostream>
    3. #include <string.h>
    4. #define MAXN 10005
    5. #define GET_LEN(ARRAY,LEN) {LEN = (sizeof(ARRAY) / sizeof(ARRAY[0]));}
    6. using namespace std;
    7. long fun(int n)//求n的阶乘
    8. {
    9. long ans=1;
    10. for(int i=1;i<=n;i++)
    11. ans*=i;
    12. cout<<n<<"的阶乘为"<<ans<<endl;
    13. return ans;
    14. }
    15. long fun(int hi,int lo)
    16. {
    17. long ans=1;
    18. for(int i=hi;i>=lo+1;i--)
    19. ans*=i;
    20. cout<<hi<<"中取"<<lo<<"的排列为"<<ans<<endl;
    21. return ans;
    22. }
    23. long per(int m,int n)//求m个元素中取n个的组合数
    24. {
    25. long ans=0;
    26. if(m>=n){
    27. if(m==n)return 1;
    28. if(n==1||n==(m-1)) return m;
    29. if(n==2||(n==(m-2)))return m*(m-1)/2;
    30. ans=fun(m,n)/fun(m-n);
    31. cout<<"select "<<n<<" from "<<m<<" have "<<ans<<" measures"<<endl;
    32. }
    33. return ans;
    34. }
    35. int ch[MAXN];
    36. int dp[MAXN];
    37. int main()
    38. {
    39. int i,j,k,l,r;
    40. // cin>>i>>j;cout<<per(i,j)<<endl;
    41. int T;cin>>T;
    42. while(T--)
    43. {
    44. int len=0;
    45. cin>>len;
    46. int m=0;cin>>m;
    47. for(i=0;i<len;i++)
    48. cin>>ch[i];
    49. //int len=strlen(ch);
    50. //GET_LEN(ch,len)
    51. //cout<<"len="<<len<<endl;
    52. for(k=0;k<len;k++){
    53. dp[k]=1;//平凡的情况,最优解为1
    54. }
    55. for(i=len-2;i>=0;i--){//定义两个游标i,j
    56. for(j=i+1;j<len;j++){
    57. if(ch[i]<ch[j]&&dp[i]<dp[j]+1) //>表示降序,<表示升序
    58. {
    59. dp[i]=dp[j]+1;//每当遇见一个就加1
    60. }
    61. }
    62. }
    63. int max=0;
    64. for(k=0;k<len;k++)
    65. {
    66. //cout<<"dp["<<k<<"]="<<dp[k]<<endl;
    67. if(max<dp[k])
    68. {
    69. max=dp[k];
    70. }
    71. }
    72. //cout<<max<<endl;
    73. int sum=0;
    74. if (m==1){
    75. sum=len;
    76. }
    77. else{
    78. for(l=len-2,r=len-1;l>=0;l--,r--)
    79. {
    80. if(dp[l]<dp[r])//出现节点
    81. {
    82. if (dp[r]>=m)
    83. {
    84. sum+=per(dp[r],m);
    85. //cout<<"sum="<<sum<<endl;
    86. }
    87. }
    88. if(l==0)
    89. {
    90. if (dp[l]>=m){
    91. sum+=per(dp[l],m);
    92. //cout<<"sum="<<sum<<endl;
    93. }
    94. }
    95. }
    96. }
    97. //cout<<"final="<<sum<<endl;
    98. cout<<sum<<endl;
    99. //cout<<"move :"<<len-max<<" times"<<endl;
    100. //cout<<len-max<<endl;
    101. }
    102. return 0;
    103. }




  • 相关阅读:
    多语言网站(如何实现网站的多语言版本?)
    宝塔linux面板.txt
    什么是海外镜像点?
    一步一步CCNA之三:路由器全局配置模式
    Kmeans算法 与 KNN算法
    新浪公开课
    shanghaiR
    Announcing Couch Crawler, a CouchDB search engine/crawler
    字符串相似度算法(编辑距离算法 Levenshtein Distance)
    R与SAS、SPSS的比较
  • 原文地址:https://www.cnblogs.com/icurious/p/6082442.html
Copyright © 2011-2022 走看看