算法第四章作业

1-1

只有当局部最优跟全局最优解一致的时候,贪心法才能给出正确的解。 (3分)

         
1-2

令S为活动选择问题(Activity Selection Problem)中所有活动的集合。则一定存在S的某个最大相容活动子集是包含了最早结束的活动am​​的。(3分)

         
1-3

令S为活动选择问题(Activity Selection Problem)中所有活动的集合。则最早结束的活动am​​一定被包含在S的所有最大相容活动子集中。(3分)

         
1-4

在活动选择问题(Activity Selection Problem)中,令 S 为活动的集合。以“每次收集最迟开始的活动”为贪心原则,可以正确找到 S 中相互兼容活动的最大规模的子集合。 (3分)

         
 
1-5

令 C 为字母集,其中每个字符 c 有对应频率 c.freq。若 C 的大小为 n,则其中任一字符 c的最优前缀编码长度都不会超过 n1. (3分)

         
 
 
2-1

给定一段文本中的4个字符(a, b, c, d)。设a和b具有最低的出现频率。下列哪组编码是这段文本可能的哈夫曼编码? (5分)

2-2

给定一段文本中的 4 个字符 (u,v,w,x) 及其出现频率 (fu​​,fv​​,fw​​,fx​​)。若对应的哈夫曼编码为 u: 00, v: 010, w: 011, x: 1,则下列哪组频率可能对应 (fu​​,fv​​,fw​​,fx​​)?(5分)

 

编程题第一题

#include <iostream>
using namespace std;

int main()
{
int n,k;//定义n和k。
int a[100];//定义数组保存各个加油站之间的距离。
int ans=0;//定义加油次数。
cin>>n>>k;//输入n和k。
int r=n;//定义一个存储油箱内油量的变量。
for(int i=0;i<k+1;i++)
{
cin>>a[k-i];
}//输入每个加油站之间的距离。
for(int i=0;i<k+1;i++)
{
if(a[i]<=r)
{
r=r-a[i];
}
else
{
r=n-a[i];
ans++;
}
}
cout<<ans;//输出结果
}

编程题第二题

#include <iostream>
#include <map>
using namespace std;
int a[100010],b[100010],c[100010],d[100010],n,now,sum,Max;
map<int,int>e;
int main(){
freopen("sche.in","r",stdin);
freopen("sche.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
scanf("%d%d",&a[i],&b[i]);
c[2*i-1]=a[i];
c[2*i]=b[i];
}
sort(c+1,c+2*n+1);
for(int i=1;i<=2*n;i++)
if(!e[c[i]])
e[c[i]]=++now;
for(int i=1;i<=n;i++)
d[e[a[i]]]++,
d[e[b[i]]]--;
for(int i=1;i<=now+1;i++)
sum+=d[i],
Max=max(Max,sum);
cout<<Max;
fclose(stdin);
fclose(stdout);
//system("pause");
return 0;
}

posted on 2018-12-02 12:02  计科一俞崔雯  阅读(2504)  评论(0编辑  收藏  举报