攔截導彈
某國進行軍事演戲,研發一種導彈攔截系統。但是這種導彈攔截系統有一個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於等於前一發的高度。某天,雷達捕捉到敵國導彈來襲。由於該系統還在試用階段,所以只用一套系統,因此有可能不能攔截所有的導彈。請你幫忙選擇一套系統,根據測試的導彈數量和每次導彈飛來的高度,計算出最多能攔截導彈的數目。
輸入
第一行輸入測試數據組數N(1<=N<=10) 接下來一行輸入這組測試數據共有多少個導彈m(1<=m<=20) 接下來行輸入導彈依次飛來的高度,所有高度值均是大於0的正整數。
|
樣例輸入
2 8 389 207 155 300 299 170 158 65 3 88 34 65
|
輸出
輸出最多能攔截的導彈數目
|
樣例輸出
6 2 |
int main(){
int n,m;
int a[21];
int dp[21];
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&m);
for(int j=1;j<=m;j++)
scanf("%d",&a[j]);
for(int j=1;j<=m;j++)
dp[j]=1;
for(int j=1;j<=m;j++){
for(int k=j+1;k<=m;k++){
if(a[k]<a[j]){
if(dp[k]<dp[j]+1)
dp[k]=dp[j]+1;
}
}
}
int maxx=dp[1];
for(int j=1;j<=m;j++){
if(dp[j]>maxx)
maxx=dp[j];
}
printf("%d\n",maxx);
}
return 0;
}
商隊運輸費
很久以前,某王國擁有 n 個大城市,爲了方便交通,國王下令修建了大量的用於連接首都和其他各大城市高速路。
爲節省經費,王國採用了一套優秀的修建方案,使得任何一個大城市都能從首都直接或者通過其他大城市間接到達。並且,如果不重複經過大城市,從首都到達每個大城市的方案都是唯一的。
G商隊是王國重要的運輸商隊,他們奔波於各大城市之間,爲王國的人們運輸商品,實現長途貿易。所以,從一個城市馬不停蹄地到另一個城市成了G商隊最常做的事情。他們有一個錢袋,用於存放往來城市間的運輸費。
在運輸過程中G商隊發現,如果不在某個城市停下來休整,在連續行進過程中,他們所花的運輸費與他們已走過的距離有關,在走第x千米到第x+1千米這一千米中(x是整數),他們花費的運輸費是x+10這麼多。也就是說走1千米花費11,走2千米要花費23。
G商隊想知道:他們從某一個城市出發,如果中間不休息,到達另一個城市,所有可能花費的運輸費中最多是多少呢?
輸入
輸入的第一行包含一個整數n,表示包括首都在內的王國的城市數 城市從1開始依次編號,1號城市爲首都。 接下來n-1行,描述王國的高速路(王國的高速路一定是n-1條) 每行三個整數Pi, Qi, Di,表示城市Pi和城市Qi之間有一條高速路,長度爲Di千米。輸入城市數(〈10),長度(〈=100)
|
樣例輸入
5 1 2 2 1 3 1 2 4 5 2 5 4
|
輸出
輸出一個整數,表示G商隊最多花費的運輸費是多少。
|
樣例輸出
135 |
#include<string.h>
int main(){
int n;
int a[11][11];
int distance[11][11];
scanf("%d",&n);
int x,y,z;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
distance[i][j]=5000;
}
for(int i=1;i<=n;i++){
distance[i][i]=0;
}
for(int i=0;i<n-1;i++){
scanf("%d %d %d",&x,&y,&z);
distance[x][y]=z;
distance[y][x]=z;
}
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
//printf("%d %d\n",distance[i][k],a[k][j]);
if(distance[i][k]!=5000&&distance[k][j]!=5000&&distance[i][k]+distance[k][j]<distance[i][j])
distance[i][j]=distance[i][k]+distance[k][j];
}
}
}
int maxx=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(distance[i][j]>maxx&&distance[i][j]!=5000)
maxx=distance[i][j];
}
}
int sum=0;
int c=11;
while(maxx-->0){
sum+=c;
c++;
}
printf("%d\n",sum);
}
向量表示
小B所在的團隊正在開發一個WEB輸入內容相似性檢測應用,她想到的一種方法是統計用戶輸入內容中不同單詞的出現頻率,據此建立一個向量表示用戶輸入的內容。
用戶輸入的內容已經經過過濾處理,只剩下單詞和空格,沒有標點符號。
各個單詞出現頻率按從小到大的順序排列後,即構成了用戶輸入內容的向量表示。
由於用戶輸入的內容可能很長,單靠人力完全無法找出來。因此小B希望你能幫忙編寫一個程序,輸出用戶內容的向量表達。
輸入
輸入包括若干行文本數據,每行表示一個用戶輸入文檔。一行文本由單詞和空格組成,單詞之間由空格分隔,最多不超過10000個ASCII碼字符。
|
樣例輸入
a bd a d
|
輸出
對於每個用戶輸入文檔,輸出一行向量表示,數值之間用空格分隔。
|
樣例輸出
1 1 2 1 2 2 |
public class Main{
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while (cin.hasNext()) {
String line = cin.nextLine();
String[] words = line.split(" ");
Map<String,Integer> map = new HashMap<String, Integer>();
for (int i = 0; i < words.length; i++) {
String key = words[i];
if(map.containsKey(key)){
int value = map.get(key);
map.put(key, value+1);
}else{
map.put(key, 1);
}
}
List<Integer> valueList = new ArrayList<Integer>(map.values());
Collections.sort(valueList);
String result = valueList.toString().replace(" ", "").replace("[", "").replace("]", "").replace(",", " ");
System.out.println(result);
}
cin.close();
}
}
組合概率
某生產零件的工廠爲方便管理場內生產的零件種類,現將他們生產的零件從低等到高等零件排序,序號分別爲1,2..n,已知該廠的任意幾個低等的零件可以組合成更高等的零件,零件的序號代表了零件的等級,比如5號零件可以由1號和4號零件組合而成,也可以有2號和3號零件組合而成。
現有一個序號爲 x 的零件,它是由 n 個序號在[a,b]區間內的零件組合而成,求n 個序號在[a,b]區間內的零件組合爲 x 零件的概率
輸入
一行輸入四個整數依次爲n,a,b,x,用空格分隔。數據規模和約定 對於50%的數據,n≤5. 對於100%的數據,n≤100,b≤100.
|
樣例輸入
2 1 3 4
|
輸出
輸出一行爲組合爲 x 零件的概率,小數點後保留四位小數。
|
|
using namespace std;
int zuhe(int n,int m){
int ret=1;
while(m--){
ret*=n;
}
return ret;
}
int fun(int a,int b,int x,int n){
if(x==0&&n==0)
return 1;
if(n==0)
return 0;
int count=0;
int temp=a;
while(temp<=b){
if(x<temp)
break;
count+=fun(a,b,x-temp,n-1);
++temp;
}
return count;
}
int main(){
int n,a,b,x;
while(cin>>n>>a>>b>>x){
int count=fun(a,b,x,n);
float p=count*1.0/zuhe(b-a+1,n);
printf("%.4f",p);
}
}