标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 24770 Accepted Submission(s): 9719
题解:贪心 从当前拦截系统中找出高度差最小的用来拦截 如果高度大于所有拦截系统则增加新的拦截系统
代码实现:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 const int inf = 0x3f3f3f; 7 const int maxn = 30011; 8 int dp[maxn]; 9 10 int main(){ 11 int a, b, n; 12 int ans; 13 bool flag; 14 while(scanf("%d", &n)!=EOF){ 15 ans = 0; 16 while(n--){ 17 a = inf; 18 scanf("%d", &b); 19 flag = false; 20 int temp; 21 for(int i = 0; i < ans; ++i){ //如果可以选出高度差最小的拦截系统 22 if(b <= dp[i] && a > dp[i]-b){ 23 a = dp[i] - b; 24 temp = i; 25 flag = true; 26 } 27 } 28 29 if(!flag){ //更新拦截系统 30 dp[ans] = b; 31 ++ans; 32 } 33 else{ 34 dp[temp] = b; 35 } 36 } 37 38 printf("%d\n", ans); 39 } 40 return 0; 41 }
标签:
原文地址:http://www.cnblogs.com/auguralpha/p/4586974.html