A. C05.L08.贪婪算法入门

锦通  金牌会员 | 2025-2-21 15:56:46 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 878|帖子 878|积分 2634

[size=2


]这套题包含了积年真题&#xff0
c;十分重要&#xff0
1
;&#xff0
1
;&#xff0
1
;&#xff0
1
;要测验的同学可以参考一下&#xff0
1
;&#xff0
1
;

[size=2


]此套题限时3小时。

A. C0
5.L0
8.贪婪算法入门&#xff0
8;一&#xff0
9;.课堂练习1
.书架(SSOI2


0
1
7五年级t6)




  • 传统题1
    0
    0
    0
    ms2


    56MiB
标题描述
为了方便同学们查阅资料&#xff0
c;程序计划兴趣小组的辅导老师打算将积攒了很多年的 n 本书放到上课教室的书架上去。
教室的书架是一层一层叠起来的&#xff0
c;每一层最多可以放 m 本书。每一层的高度由放在这层中最高的那本书决定的&#xff0
c;如果不放书&#xff0
c;则认为这层的高度为 0
。为了使每个同学能方便地拿到想要的书&#xff0
c;书架的总高度应尽可能低。请编程盘算将这 n 本书放在书架上后书架的最小总高度&#xff0
c;盘算的过程中不思量书的厚度与书架本身材料的厚度。
输入格式
共 n&#4
3;1
行。
第 1
行 2


个整数 n 和 m ( 1
≤ m ≤ n ≤ 1
0
0
0
0
0
) 。
接下来 n 行&#xff0
c; 每行 1
个正整数&#xff0
c; 分别表示每本书的高度( 每本书的高度不超过 1
0
0
)。
输特别式
一个整数&#xff0
c;表示将 n 本书放入书架后书架的最小总高度。
样例
[size=4
]输入数据 1


  1. 3 2
  2. 2
  3. 0
  4. 1
  5. 0
  6. 30
复制代码
Copy
[size=4
]输出数据 1


  1. 4
  2. 0
复制代码
Copy
样例解释
将高度是 30
和 2


0
的两本书放在一层&#xff0
c;则这层的高度为 30
&#xff0
c;将高度是 1
0
的那本书放在另外一层&#xff0
c;则这层的高度为 1
0
&#xff0
c;则书架的总高度为 4
0


&#xff0
c;满意最小。
代码

  1. #include<bits/stdc&#4
  2. 3;&#4
  3. 3;.h>
  4. using namespace std;
  5. long long n,m,a[1
  6. 0
  7. 0
  8. 0
  9. 0
  10. 5],s;
  11. int main()
  12. {
  13.     cin>>n>>m;
  14.     for(int i&#61
  15. ;1
  16. ;i<&#61
  17. ;n;i&#4
  18. 3;&#4
  19. 3;)
  20.     {
  21.         cin>>a[i];
  22.     }
  23.     sort(a&#4
  24. 3;1
  25. ,a&#4
  26. 3;n&#4
  27. 3;1
  28. );
  29.     for(int i&#61
  30. ;n;i>&#61
  31. ;0
  32. ;i-&#61
  33. ;m)
  34.     {
  35.         s&#61
  36. ;s&#4
  37. 3;a[i];
  38.     }
  39.     cout<<s;
  40.     return 0
  41. ;   
  42. }
复制代码
B. C0
5.L0
8.贪婪算法入门&#xff0
8;一&#xff0
9;.课堂练习2


礼物




  • 传统题1
    0
    0
    0
    ms2


    56MiB
标题描述
国庆马上要到了。小明喜欢的礼物有 n 种分别是&#xff1
a;公仔、电子手表、漫画书等。
每种礼物有一件&#xff0
c;每种礼物价钱都不一样。小明手头上有 m 元。
小明最多可以买多少件礼物&#xff1
f;
输入格式
第一行&#xff0
c;两个整数&#xff1
a; n , m ( 1
<&#61
; n<&#61
;1
0
0
, 1
<&#61
; m <&#61
; 1
0
0
0
0
0
)。
第二行&#xff0
c; n 个空格分开的整数( 每个整数 <&#61
; 1
0
0
0
)&#xff0
c;代表每种礼物的价钱。
输特别式
一个整数&#xff0
c;小明能买多少件礼物。
样例
[size=4
]输入数据 1


  1. 3 1
  2. 0
  3. 0
  4. 4
  5. 0
  6. 70
  7. 50
复制代码
Copy
[size=4
]输出数据 1


  1. 2
复制代码
代码

  1. #include<bits/stdc&#4
  2. 3;&#4
  3. 3;.h>
  4. using namespace std;
  5. int main() {
  6.     int n,m;
  7.     cin>>n>>m;
  8.     vector<int>a(n);
  9.     for(int i&#61
  10. ;0
  11. ;i<n;i&#4
  12. 3;&#4
  13. 3;)
  14.     {
  15.         cin>>a[i];
  16.     }
  17.     sort(a.begin(),a.end());
  18.     int o&#61
  19. ;0
  20. ;
  21.     int t&#61
  22. ;0
  23. ;
  24.     for(int i&#61
  25. ;0
  26. ;i<n;i&#4
  27. 3;&#4
  28. 3;)
  29.     {
  30.         if(t&#4
  31. 3;a[i]<&#61
  32. ;m)
  33.         {
  34.             t&#4
  35. 3;&#61
  36. ;a[i];
  37.             o&#4
  38. 3;&#4
  39. 3;;
  40.         }
  41.         else
  42.         {
  43.             break;
  44.         }
  45.     }
  46.     cout<<o;
  47.     return 0
  48. ;
  49. }
复制代码
C. C0
5.L0
8.贪婪算法入门&#xff0
8;一&#xff0
9;.课堂练习3.数字圈(DLOI2


0
1
9t4
)




  • 传统题1
    0
    0
    0
    ms2


    56MiB
标题描述
当我们写数字时会发现有些数字有封闭地区&#xff0
c;有的数字没有封闭地区。
数字 0
有一个封闭地区&#xff0
c;数字 1
、2


、 3 都没有封闭地区&#xff0
c;数字 4
有一个封闭地区&#xff0
c;数字 5 没有封闭地区&#xff0
c;数字 6 有一个封闭地区&#xff0
c;数字 7 没有 封闭地区&#xff0
c;数字 8 有两个封闭地区&#xff0
c;数字 9 有一个封闭地区。
现在你要构造一个最小的非负整数&#xff0
c;使得它的各位数字的封闭地区的数量加起来的总和恰好等于 K。
输入格式
一个整数 K ( 1
<&#61
; K <&#61
; 2


50
0
)
输特别式
满意题意的最小的非负整数。
样例
[size=4
]输入数据 1


  1. 4
  2. 0
复制代码
Copy
[size=4
]输出数据 1


  1. 88888888888888888888
复制代码
Copy
[size=4
]输入数据 2




  1. 1
复制代码
Copy
[size=4
]输出数据 2




  1. 0
复制代码
Copy
[size=4
]输入数据 3

  1. 2
复制代码
Copy
[size=4
]输出数据 3

  1. 8
复制代码
代码

  1. #include<bits/stdc&#4
  2. 3;&#4
  3. 3;.h>using namespace std;int k;int main(){    cin>>k;    if(k&#61
  4. ;&#61
  5. ;1
  6. )    {        cout<<0
  7. ;        return 0
  8. ;    }    if(k%2
  9. &#61
  10. ;&#61
  11. ;1
  12. )    {        cout<<&#34
  13. ;4
  14. &#34
  15. ;;        for(int i&#61
  16. ;1
  17. ;i<&#61
  18. ;k/2
  19. ;i&#4
  20. 3;&#4
  21. 3;)        {            cout<<&#34
  22. ;8&#34
  23. ;;        }    }    else    {        for(int i&#61
  24. ;1
  25. ;i<&#61
  26. ;k/2
  27. ;i&#4
  28. 3;&#4
  29. 3;)        {            cout<<&#34
  30. ;8&#34
  31. ;;        }    }    return 0
  32. ;}
复制代码
D. C0
5.L0
8.贪婪算法入门&#xff0
8;一&#xff0
9;.课堂练习4
.伤害的实行(NHOI2


0
1
5初中)




  • 传统题1
    0
    0
    0
    ms2


    56MiB
标题描述
小明近来在上化学课&#xff0
c;他需要利用到 n 种化学物质来进行他的实行。在做实行的时候&#xff0
c;他需要将全部化学物质放在桌面上&#xff0
c;按序次排成一条直线。
然而每一种化学物质都是伤害品&#xff0
c;对于第 i 个化学物质&#xff0
c;如果有另外一个化学物质距离它的距离小于 a_iai​&#xff0
c;那么就会发生爆炸。
小明想知道如果要安全的完成他的实行&#xff0
c;桌子最短可以多短。
输入格式
第一行一个整数 n &#xff0
c;表示化学物质的个数。
第二行有 n 个整数&#xff0
c;第 i 个整数 a_iai​ 表示第 i 个化学物质必须与其他化学物质保持的距离。
数据范围
2


0
% 的数据 , 1
<&#61
; n <&#61
; 2


0

50
% 的数据 , 1
<&#61
; n<&#61
; 1
0
0
0
0
0

1
0
0
% 的数据 , 1
<&#61
; n <&#61
; 1
0
0
0
0
0
0
, 1
<&#61
; a_iai​ <&#61
; 1
0
0
0
0
0

输特别式
一个整数&#xff0
c;表示可以或许让小明安全完成实行的桌子最小长度。
注意&#xff1
a;物品要安原来的序次摆放。
样例
[size=4
]输入数据 1


  1. 33 1
  2. 2
复制代码
Copy
[size=4
]输出数据 1


  1. 5
复制代码
代码

  1. #include<bits/stdc&#4
  2. 3;&#4
  3. 3;.h>using namespace std;long long n,a[1
  4. 0
  5. 0
  6. 0
  7. 0
  8. 0
  9. 0
  10. 1
  11. ],o&#61
  12. ;0
  13. ;int main(){    cin>>n;    for(int i&#61
  14. ;1
  15. ;i<&#61
  16. ;n;i&#4
  17. 3;&#4
  18. 3;)    {        cin>>a[i];    }    for(int i&#61
  19. ;1
  20. ;i<n;i&#4
  21. 3;&#4
  22. 3;)    {        o&#61
  23. ;o&#4
  24. 3;max(a[i],a[i&#4
  25. 3;1
  26. ]);    }    cout<<o;    return 0
  27. ;}
复制代码
E. C0
5.L0
8.贪婪算法入门&#xff0
8;一&#xff0
9;.课堂练习5.最大步数(GCOI2


0
1
9六年级t2


)




  • 传统题1
    0
    0
    0
    ms2


    56MiB
标题描述
给出了两个非负整数 P 和 Q。您的任务是使得 P 和 Q 相等。在每一步中&#xff0
c;您可以实行以 下两项操作之一&#xff1
a; 1
、将任何质数加到 P 上。 2


、从 Q 减去任何质数。 如果不可能使 P 和 Q 相等&#xff0
c;则输出 -1
。否则&#xff0
c;输出一个非负整数&#xff1
a;可以实行的最大步数。
输入格式
数字 0
和 1
不是质数。
输特别式
一行&#xff0
c;两个整数 P 和 Q。 0
<&#61
; P, Q <&#61
; 1
0
^1
8
样例
[size=4
]输入数据 1


  1. 5 9
复制代码
Copy
[size=4
]输出数据 1


  1. 2
复制代码
Copy
[size=4
]输入数据 2




  1. 5 1
  2. 0
复制代码
Copy
[size=4
]输出数据 2




  1. 2
复制代码
Copy
[size=4
]输入数据 3

  1. 5 6
复制代码
Copy
[size=4
]输出数据 3

  1. -1
复制代码
代码

  1. #include<bits/stdc&#4
  2. 3;&#4
  3. 3;.h>using namespace std;long long p,q;int main(){    cin>>p>>q;    if(p>q)    {        cout<<-1
  4. ;        return 0
  5. ;    }    if(p-q&#61
  6. ;&#61
  7. ;0
  8. )    {        cout<<0
  9. ;        return 0
  10. ;    }    if(p-q&#61
  11. ;&#61
  12. ;1
  13. )    {        cout<<-1
  14. ;        return 0
  15. ;    }    cout<<(q-p)/2
  16. ;    return 0
  17. ;}
复制代码
F. C0
5.L0
8.贪婪算法入门&#xff0
8;一&#xff0
9;.课堂练习6.渡河(GCOI2


0
1
9六年级t4
)




  • 传统题1
    0
    0
    0
    ms2


    56MiB
标题描述
统共有 X 人要坐船过河。
一个小船最多可以坐 4
人&#xff0
c;一个小船固定收费 32



元。
一个大船最多可以坐 6 人&#xff0
c;一个大船固定收费 36 元。
船埠有无穷多小船和大船。
问如何坐船&#xff0
c;才气使得总费用最小。
输入格式
一个整数 X。
数据范围
60
% 的数据, 1
<&#61
; X <&#61
; 1
0
0
0

80
% 的数据, 1
<&#61
; X <&#61
; 1
0
0
0
0
0
0

1
0
0
% 的数据, 1
<&#61
; X <&#61
; 2


0
0
0
0
0
0
0
0
0

输特别式
一个整数&#xff0
c;表示最小的总费用。
样例
[size=4
]输入数据 1


  1. 4
复制代码
Copy
[size=4
]输出数据 1


  1. 32
复制代码
Copy
[size=4
]输入数据 2




  1. 1
  2. 2
复制代码
Copy
[size=4
]输出数据 2




  1. 72
复制代码
代码

  1. #include<bits/stdc&#4
  2. 3;&#4
  3. 3;.h>using namespace std;long long x,s,l;int main(){    cin>>x;    if(x<&#61
  4. ;4
  5. )s&#61
  6. ;32
  7. ;    else    {        s&#4
  8. 3;&#61
  9. ;(x/6)*36;        l&#61
  10. ;x%6;        if(l&#61
  11. ;&#61
  12. ;5)        {            s&#4
  13. 3;&#61
  14. ;36;        }        if(l&#61
  15. ;&#61
  16. ;4
  17. ||l&#61
  18. ;&#61
  19. ;3)        {            s&#4
  20. 3;&#61
  21. ;32
  22. ;        }        if(l&#61
  23. ;&#61
  24. ;2
  25. ||l&#61
  26. ;&#61
  27. ;1
  28. )        {            s&#4
  29. 3;&#61
  30. ;2
  31. 8;        }    }    cout<<s;    return 0
  32. ;}
复制代码
谢谢欢看&#xff0
1
;&#xff0
1
;&#xff0
1
;&#xff0
1
;

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao1
2


3.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

锦通

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表