時間限制: 1000 ms 記憶體限制: 65536 kb
某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈。
輸入飛彈依次飛來的高度(雷達給出的高度資料是不大於30000的正整數,飛彈數不超過1000),計算這套系統最多能攔截多少飛彈,如果要攔截所有飛彈最少要配備多少套這種飛彈攔截系統。
輸入飛彈依次飛來的高度。
第一行:最多能攔截的飛彈數;
第二行:要攔截所有飛彈最少要配備的系統數。
389 207 155 300 299 170 158 65
6
2
【解析】最多能攔截的飛彈數,相當於求最長不上公升序列。
要攔截飛彈需要最少配備的系統數,使用貪心的策略,每顆飛彈來襲時,使用能攔截這顆飛彈的防禦系統中上一次攔截飛彈最低的那一套攔截系統來攔截。
/*
389 207 155 300 299 170 158 65
*/#include#include#include#define maxn 1000
using namespace std;
int a[maxn+10];//飛彈飛來時的高度
int l[maxn+10];//攔截飛彈最低高度
int f[maxn+10];//最多能攔截的飛彈數,也就是最長不上公升序列的長度
int main()
int i,j,len=0;
for(int i=2;i<=n-1;i++)//求最長不上公升序列
}if(p==0)
else l[p]=a[i];//更新原系統的攔截最小值
} cout<
錯誤的**:(還沒想通為什麼++n會影響結果)
#include#include#includeusing namespace std;
int f[100005],a[100005];
int main()
} max1 = max(max1, f[i]); }
for(int i = 1; i <= n; ++i)//求最長上公升子串行
max2 = max(max2,f[i]);
} printf("%d\n%d",max1,max2);
return 0;
}
正確的**:
#include#includeusing namespace std;
int n,ans1,ans2,f[100001],a[100001];
int main()
ans1=max(ans1,f[i]);//更新ans1
}for(int i=1;i<=n;i++)
ans2=max(ans2,f[i]);//更新ans2
}printf("%d\n%d\n",ans1,ans2);
}
攔截飛彈 貪心
問題描述 某國為了防禦敵國的飛彈襲擊,開發出一種飛彈攔截系統,但是這種攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲,由於該系統還在試用階段。所以一套系統有可能不能攔截所有的飛彈。輸入飛彈依次飛來的高度 雷達給出的高...
動態規劃 攔截飛彈
動態規劃 攔截飛彈 時間限制 1 sec 記憶體限制 256 mb 張琪曼 老師,修羅場是什麼?墨老師 修羅是佛家用語,修羅畢生以戰鬥為目標,修羅場指的是他們之間的死鬥坑,人們通常用 修羅場 來形容慘烈的戰場。後來又引申出 乙個人在困境中做絕死奮鬥 的意思。所以,這其實也在暗示我們,即使是身處絕境,...
動態規劃之攔截飛彈
時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 某國為了防禦敵國的飛彈襲擊,發展中一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於等於前一發的高度。某天,雷達捕捉到敵國飛彈來襲。由於該系統還在試用階段,所以只...