算法第四章作业

1.你对贪心算法的理解

贪心算法就是在考虑问题时,总是做出在当前状况来说最好的算则,而不从整理来考虑。

从某种意义上说是局部最优解,贪心算法所得到的答案并不一定是整体最优解,所以在使用贪心算法一定要考虑清楚,是否能使用贪心算法。

 

2.请选择一道作业题目说明你的算法满足贪心选择性质

4-2 删数问题 (110分)
 

给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新 的正整数。对于给定的n位正整数a和正整数 k,设计一个算法找出剩下数字组成的新数最 小的删数方案。

输入格式:

第 1 行是1 个正整数 a。第 2 行是正整数k。

输出格式:

输出最小数。

输入样例:

在这里给出一组输入。例如:

178543 
4 
 

输出样例:

在这里给出相应的输出。例如:

13


#include <iostream>
#include<algorithm>
#include<string>
#include<bits/stdc++.h>
using namespace std;
int main() {
string a;
int n,i,j,k;//
cin>>a;
cin>>n;
int len=a.size();
for(k=0;k<n;k++)//控制循环次数
{
for(i=0;i<len-1;i++)
{
if(a[i]>a[i+1])//删数
{
for(j=i;j<len-1;j++)
a[j]=a[j+1];
break;
}
}
len--;//不管怎样,长度都会小一,比如123456这种情况,上面的是无法满足的
}
i=0;
while(i<=len-1&&a[i]=='0')
i++;

if(i==len)
cout<<"0"<<endl;
else
for(j=i;j<=len-1;j++)
cout<<a[j];
return 0;
}

算法思想:当前一个数大于或等于后一个数时,就把此数删去

3.请说明在本章学习过程中遇到的问题及结对编程的情况

对我来说贪心算法比动态规划更容易理解,但是做题时总会考虑差一些点。结对编程的时候,我们一起讨论那些测试点为什么过不了,一起想出反例。

posted @ 2020-11-15 11:42  IWTBWYR  阅读(62)  评论(0编辑  收藏  举报