POJ 2433 Landscaping
2016-03-28 17:12
169 查看
POJ 2433 Landscaping
这个题用贪心可以过,当然不排除某些人用了DP过了此题。
先说下题意:就是一座山有好多个山峰,最后保留K个山峰,其他的都去掉了,求最少去掉几块泥块。题目给的是每个位置的泥块高度。下面说一下贪心是怎么做的。
先把山峰削平,比如
削平后就是这样
上面都没有了,只剩下个平平的底座
接下来按照贪心往上加山块
所以写了两个函数,判断加哪个山头这样是当前可以加最多的泥块,这样才能保证削掉的泥块尽量少
Add_Most查询加上这个山头最多 能加多少块泥土
先用Add_Most查询加泥土最多的山头,然后用Add直接就是加上这个山头
循环K次(K<=25)
附上AC代码:
* * * *
* * * * * * * * *
* * * * * * * * * * * *
这个题用贪心可以过,当然不排除某些人用了DP过了此题。
先说下题意:就是一座山有好多个山峰,最后保留K个山峰,其他的都去掉了,求最少去掉几块泥块。题目给的是每个位置的泥块高度。下面说一下贪心是怎么做的。
先把山峰削平,比如
削平后就是这样
上面都没有了,只剩下个平平的底座
接下来按照贪心往上加山块
所以写了两个函数,判断加哪个山头这样是当前可以加最多的泥块,这样才能保证削掉的泥块尽量少
Add_Most查询加上这个山头最多 能加多少块泥土
先用Add_Most查询加泥土最多的山头,然后用Add直接就是加上这个山头
循环K次(K<=25)
附上AC代码:
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; const int maxn = 1000 + 10; int a[maxn]; int d[maxn]; int n, k; int peak[maxn], cnt = 0; int Add_most(int dig){ int sum = a[dig] - d[dig]; if(sum==0) return 0; int h = a[dig]; for(int i = dig - 1; i>0;--i){ h = min(a[i], h); if(d[i] >= h) break; sum+=h-d[i]; } h = a[dig]; for(int i = dig + 1; i<=n; ++i){ h = min(a[i], h); if(d[i] >= h) break; sum+=h-d[i]; } return sum; } void Add(int dig){ int h = a[dig]; d[dig] = a[dig]; for(int i = dig - 1; i>0;--i){ h = min(a[i], h); if(d[i] >= h) break; d[i] = h; } h = a[dig]; for(int i = dig + 1; i<=n; ++i){ h = min(a[i], h); if(d[i] >= h) break; d[i] = h; } } int main(){ while(scanf("%d%d", &n, &k)==2){ for(int i = 1; i <= n ; ++i){ scanf("%d", &a[i]); } a[0] = a[n+1] = 0; int mi = a[1]; for(int i = 1; i<=n; ++i) mi = min(mi, a[i]); for(int i = 1; i<=n; ++i){ d[i] = mi; } cnt = 0; bool up=false; for(int i = 0; i<=n; ++i){ if(a[i]>a[i+1]&&up==true){ peak[cnt++] = i; up = false; } else if(a[i]<a[i+1]) up=true; } int last = 0; while(last<k){ int maxv = 0, maxd = 0; for(int i = 0; i<cnt; ++i){ int t = Add_most(peak[i]); // cout<<"p "<<peak[i]<<" "<<t<<endl; if(t>maxv){ maxv = t; maxd = peak[i]; } } Add(maxd); ++last; } int sum = 0; for(int i = 1; i<=n; ++i){ sum +=a[i]-d[i]; } printf("%d\n", sum); } return 0; }
* * * *
* * * * * * * * *
* * * * * * * * * * * *
相关文章推荐
- iOS UIView及其子控件的常用设置
- SQL && mongo Shell && C++ Driver
- Android Spinner点击选中Item不再调用onItemSelected方法的方案
- angularjs上传图片并转换成base64保存到数据库
- iOS学习之路(三)--界面篇
- 【PA2014Final】【BZOJ3726】Wykladzina
- time_wait tcp
- WeakReference不影响引用计数
- PHP数据结构之——链表
- android install soft
- Photoshop“替换颜色”实现局部换色
- 隐藏index.php - ThinkPHP完全开发手册 - 3.1
- ss命令和Recv-Q和Send-Q状态
- awk命令学习
- 30天入门 Android 开发, Google 与你一起圆梦
- 批处理 选项语法
- [JS插件] wScratchPad.js刮刮卡效果-页面涂抹消失插件
- windows下resin的配置部署与调试
- POJ 1703
- java.lang.TypeNotPresentException: Type org.eclipse.jetty.maven.plugin.JettyRunMojo not present