博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVa 11491 Erasing and Winning
阅读量:7041 次
发布时间:2019-06-28

本文共 1166 字,大约阅读时间需要 3 分钟。

题意:给出一个n位的整数,要求删除其中的d个数字,使得剩下的部分最大化。

 

有简单的做法,我们可以注意到,高位对一个数字的是有绝对的影响力的,所以我们需要保证高位足够大,我们可以这样贪心求解,我们对这n个数字从前往后考虑:

若后一个数字比前一个数字大,则前面这个数字肯定需要删除,并且删除之后我们还得和新的前一个数字比较,如果仍然是后一个数字大我们还得将这个新的前一个数字删除并继续这样比较下去,直到比较到最前面或者前一个数字大于等于后一个数字。

若后一个数字小于等于前一个数字,我们就继续往下比较。

按照这种规则,当我们删除d个数字之后就可以直接得出最后的结果。

代码就可以写的很简短:

1 #include 
2 using namespace std; 3 4 const int maxn = 100000; 5 char str[maxn]; 6 7 int main(){ 8 #ifdef TEST 9 freopen("out.txt", "w", stdout);10 freopen("in.txt", "r", stdin);11 #endif // TEST12 int n, d;13 while(scanf("%d%d", &n, &d) == 2 && n){14 getchar();15 char ch;16 int cnt = 0, td = d;17 while((ch=getchar())!='\n'){18 if(cnt == 0 || td == 0) str[cnt++] = ch;19 else {20 int t = cnt - 1;21 while(t >= 0 && td > 0 && ch > str[t]) {22 t--;23 td--;24 }25 str[t+1] = ch;26 cnt = t+2;27 }28 }29 str[n-d] = '\0';30 puts(str);31 }32 return 0;33 }
View Code

 

转载于:https://www.cnblogs.com/DynastySun/p/9349026.html

你可能感兴趣的文章
转-让你的控件也具有拖拽(drag-and-drop)功能
查看>>
win32的时间api
查看>>
学习OpenCV——绘制彩色直方图(HSV2BGR)
查看>>
Processing中图片色彩设置
查看>>
Cocos2d 中对图片的各种操作
查看>>
cocos2d坐标系
查看>>
Android.mk的用法和基础
查看>>
CentOS7 安装Docker
查看>>
笔记本高分辨软件兼容问题,字体太小或模糊
查看>>
分布式存储系统可靠性系列五:副本放置算法 & CopySet Replication
查看>>
常用电线负载的电流和功率
查看>>
TreeMap升序|降序排列和按照value进行排序
查看>>
redis在windows10上跑起来
查看>>
面试题目:反转链表的算法实现
查看>>
xss挖掘初上手
查看>>
SGU 116 Index of super-prime
查看>>
简化Web开发的12个HTML5-CSS框架
查看>>
C#温故而知新学习系列之.NET运行机制—.NET中非托管代码是指什么?(二)
查看>>
25个漂亮的国外绿色网站设计作品分享
查看>>
C++中delete与delete[]
查看>>