ACM第二次总结感悟

所学内容:
回顾这周学的东西(因为贪心算法是一个整体问题故一块进行了整理),主要还是贪心算法。
多次输入:while(scanf("%d%d",&c,&n)!=EOF);
贪心策略:
需要解决两个问题:
1、是否适合于用贪心策略。
2、如何选择贪心标准,以得到问题的最优/较优解。
一、最优装载问题:
策略:重量轻者先装载;
表示集装箱的数据结构:
struct load
{
int index;
int w;
}box[1001];
排列因子:
bool cmp(load a,load b)
{
if(a.w<b.w) return true;
else return false;
}
二、背包问题
按照性价比,性价比高的优先。
数据结构:
struct bag
{
int w;
int v;
double c;
}a[1001];
排列因子:
bool cmp(bag a,bag b)
{
return a.c>=b.c;
}
三、货币找零
事先将Value按照从小到大的顺序排列;
const int N=7;
int Count[N]={3,0,2,1,2,2,3};
int value[N]={1,2,5,10,20,50,100};
int ans=0;
void solve(int money)
{
for(int i=N-1;i>=0;i–)
{
int c=min(money/value[i],Count[i]);
money=money-cvalue[i];
if(c!=0)
{
ans+=c;
}
}
if(money>0)
{
printf("\n不能找零");
}else
{
printf("%d\n",ans);
}
}
四、区间调度问题
每次都选择结束时间最早的
对工作排序的数组:
pair<int , int>itv[n];
五、字典序最小问题
从性质上看只要前面部分较小即可。
1、按照字典序比较S和将S反转后的字符串S‘。
2、如果S较小,从S的开头取出一个字,追加到T的末尾。
3、如果S’较小,从S的末尾取出一个字,追加到T的末尾。
六、分发饼干
原则是大尺寸分给胃口大的孩子。
七、小船过河问题
1、最快的和次快的过河,然后最快的将船划回来,次慢的和最慢的过河,然后次快的把船滑过来,时间:t[0]+2
t[1]+t[n-1].
2、最快的和最慢的过河,最快的划回来,最快和次慢的过河,然后最快的划回来,时间:2*t[0]+t[n+2]+t[n-1]。

总结感悟

在经历了这些天的学习,课堂上跟着老师的思路进行分析问题,好多时候发现其实自己是有点跟不上的,我感觉最主要的原因还是对于第一讲.STL的函数运用不熟练,甚至有些需要自己再翻阅资料才能再了解。这也就导致了老师在提起有关函数时一时间不能准确想到其用法。这也耽误了我的思维进度,所以我决定再次进行加强记忆。
我感觉这星期给我带来更大的困难还是那26个贪心题,对于题目,我好像最难的不是去想这道题的解题思路,而是我根本读不懂英文题目,这个时候我才感觉到自己的英语功底是多么糟糕,因为看不懂题目,想找翻译也很难找到,这也就导致我在最初做题的时候不得不找到题解,然后根据题解再逆推去理解题意,这大大耽误了自己的学习进程,所以在日后我会提升自己的英语能力,让自己不再依赖别人的题解,努力自己读题。
最后,在做题时也确实发现在自己身上存在的一个严重问题,那就是对所学的不能很好的运用,自己在平时因为读不懂题目,耽误进度,影响了对所学知识在做题中的强化记忆,因此,我会在提高自己编程能力的同时提高英语能力。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值