贪心是一种很重要的算法思想,下列问题中不适合用贪心解决的是( )。 A.田忌和齐王赛马,他们各有n匹马,一共要进行n场比赛,每匹马只能出场一次,赢的一方从输的一方获得200银币,打平就不得钱。问田忌要怎样安排马的出场次序才能使最后获得的钱最多? B.给定一个十进制正整数n(0<n<100000000),每个数位上的数字均不为0,n的位数为m,现在从m位中删除k位,求生成的新整数最小为多少。 C.给定一个长度为m的区间,再给出n条线段的起点和终点,求最少使用多少条线段可以将整个区间完全覆盖。 D.有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。
时间: 2023-06-19 12:07:32 浏览: 56
B.给定一个十进制正整数n(0<n<100000000),每个数位上的数字均不为0,n的位数为m,现在从m位中删除k位,求生成的新整数最小为多少。 这个问题不适合用贪心解决,因为每一位的数字大小不仅与该位的数字有关,还与其他位的数字有关,无法通过每一位的最优解得到整个问题的最优解。需要通过其他算法思想来解决,比如动态规划。
相关问题
贪心算法解决田忌赛马问题C语言代码
以下是贪心算法解决田忌赛马问题的C语言代码:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100
int n;
int ta[MAX_N], tb[MAX_N];
int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &ta[i]);
}
for (int i = 0; i < n; i++) {
scanf("%d", &tb[i]);
}
qsort(ta, n, sizeof(int), cmp);
qsort(tb, n, sizeof(int), cmp);
int ans = 0;
int j = 0;
for (int i = 0; i < n; i++) {
if (ta[i] > tb[j]) {
ans++;
j++;
}
}
printf("%d\n", ans);
return 0;
}
```
该代码中,首先读入输入数据,然后将田忌和齐王的马按照速度从小到大排序。接着,使用贪心算法,从田忌的最慢的马开始比较,如果田忌的马速度大于齐王的马速度,则选择该马进行比赛,并将齐王的马的下标加一,直到比较完所有的马。最后输出比赛的场次即可。
pta贪心算法(田忌赛马)
PTA(Programming Teaching Assistant)是一个在线编程练习平台,而贪心算法是其中的一种常见算法思想。贪心算法是一种在每一步选择中都采取当前状态下最优的选择,从而希望最终能够达到全局最优解的算法。
田忌赛马问题是贪心算法的一个经典应用场景。问题描述如下:田忌和齐王要进行赛马比赛,田忌手中有n匹马,每匹马有不同的速度,齐王手中也有n匹马,同样每匹马有不同的速度。比赛规则是每次田忌可以选择一匹马与齐王进行比赛,速度较快的马获胜。田忌的目标是尽可能多地获胜。
贪心算法解决田忌赛马问题的思路是:首先将田忌和齐王手中的马按照速度从快到慢进行排序。然后从最慢的马开始比较,如果田忌手中最慢的马能够战胜齐王手中最慢的马,则选择这两匹马进行比赛;否则,选择田忌手中最快的马与齐王手中最慢的马进行比赛。依次类推,直到所有的马都进行了比赛。
贪心算法的关键在于每一步选择当前状态下的最优解,但并不保证能够得到全局最优解。在田忌赛马问题中,贪心算法的思路是尽可能地让田忌手中速度较快的马与齐王手中速度较慢的马进行比赛,从而提高田忌获胜的概率。