1. 程式人生 > >【華為機試】題目+解答+自己不足+提升

【華為機試】題目+解答+自己不足+提升

#include<iostream>
#include<stack>
#include<algorithm>
using namespace std;

int num[400][400];
int len[400][400];

int max(int a,int b)
{
	if(a>b)
		return a;
	else
		return b;
}

int main()
{
    int m,n;
    scanf("%d %d",&m,&n);
	for(int i=1;i<=m;i++)
	{
		len[i][0]=0;
		for(int j=1;j<=n;j++)
		{
			len[0][j]=-1;
			scanf("%d",&num[i][j]);
			if(num[i][j]) len[i][j]=len[i][j-1]+num[i][j];
			else len[i][j]=0;
		}
		
	}
	stack<int> S;
	int ans=0,tmp;
	for(int j=n;j>0;j--)
	{
		int W,L;
		tmp=0;
		if(ans>=j*m) 
			break;
		S.push(0);
		for(int i=1;i<=m;i++)
		{
			if(len[i][j]>len[S.top()][j]) {S.push(i);}
			else
			{
				while(!S.empty()&&len[i][j]<=len[S.top()][j])
				{
					L=S.top();
					S.pop();
					int p=S.top();
					W=(i-p-1);
					tmp=max(tmp,W*len[L][j]);
					
				}
				S.push(i);
			}
		}
		int LL;
		if(!S.empty())LL=S.top();
		while(!S.empty())
		{
			L=S.top();
			S.pop();
			int p=S.top();
			if(p) W=(LL-p);
			else {W=LL;S.pop();}
			tmp=max(tmp,W*len[L][j]);
			
		}
		ans=max(tmp,ans);
	}
	printf("%d\n",ans);
    return 0;
}

歡迎討論!

相關推薦

題目+解答+自己不足+提升

#include<iostream> #include<stack> #include<algorithm> using namespace std; int num[400][400]; int len[400][400]; int max(int a,int b)

找最高分(通過此題熟悉牛客網Node輸入輸出)

length 輸出 ons ken [0 接下來 lin tput int 來源:牛客網 老師想知道從某某同學當中,分數最高的是多少,現在請你編程模擬老師的詢問。當然,老師有時候需要更新某位同學的成績. 輸入描述: 輸入包括多組測試數據。每組輸入第一行是兩個正整數N和M(0

—— 6.質數因子

string ner out system pre 分享 args 機試 分享圖片 題目 解法 import java.util.Scanner; public class Main { public static void main(Strin

079計算字串的相似度

題目描述: 對於不同的字串,我們希望能有辦法判斷相似程度,我們定義了一套操作方法來把兩個不相同的字串變得相同,具體的操作方法如下: 1 修改一個字元,如把“a”替換為“b”。 2 增加一個字元,如把“abdd”變為“aebdd”。 3 刪除一個字元,

078超長正整數相加

題目描述: 請設計一個演算法完成兩個超長正整數的加法。 Java實現: import java.util.*; import java.math.BigInteger; public class Main{ public static void main(String[]

077火車出站

題目描述: 給定一個正整數N代表火車數量,0<N<10,接下來輸入火車入站的序列,一共N輛火車,每輛火車以數字1-9編號。要求以字典序排序輸出火車出站的序列號。  Java實現: import java.util.ArrayList; import java.u

076尼科徹斯定理

題目描述: 驗證尼科徹斯定理,即:任何一個整數m的立方都可以寫成m個連續奇數之和。 例如: 1^3=1  2^3=3+5  3^3=7+9+11  4^3=13+15+17+19  Java實現: import java.u

075公共字串計算

題目描述: 計算兩個字串的最大公共字串的長度,字元不區分大小寫 Java實現: import java.util.Scanner; public class Main { public static void main(String[] args) { Sc

074引數解析

題目描述: 在命令列輸入如下命令: xcopy /s c:\ d:\, 各個引數如下:  引數1:命令字xcopy  引數2:字串/s 引數3:字串c:\ 引數4: 字串d:\ 請編寫一個引數解析程式,實

073計算日期到天數轉換

題目描述: 輸入某年某月某日,判斷這一天是這一年的第幾天? Java實現: import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc=n

072百錢買百雞問題

題目描述: 公元前五世紀,我國古代數學家張丘建在《算經》一書中提出了“百雞問題”:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何? Java實現: import java.util.Scanner; public class Main{ pu

071字串萬用字元

題目描述: 在計算機中,萬用字元一種特殊語法,廣泛應用於檔案搜尋、資料庫、正則表示式等領域。現要求各位實現字串萬用字元的演算法。 要求: 實現如下2個萬用字元: *:匹配0個或以上的字元(字元由英文字母和數字0-9組成,不區分大小寫。下同) ?:匹配1個字元 輸入: 萬用字元表示式;

070矩陣乘法計算量估算

題目描述: 矩陣乘法的運算量與矩陣乘法的順序強相關。 例如:     A是一個50×10的矩陣,B是10×20的矩陣,C是20×5的矩陣   計算A*B*C有兩種順序:((AB)C)或者(A(BC)),前者需要計算15000

069矩陣乘法

題目描述: 如果A是個x行y列的矩陣,B是個y行z列的矩陣,把A和B相乘,其結果將是另一個x行z列的矩陣C。 Java實現: import java.util.Scanner; public class Main { public static void main(Stri

068成績排序

題目描述: 輸入任意(使用者,成績)序列,可以獲得成績從高到低或從低到高的排列,相同成績       都按先錄入排列在前的規則處理。    例示:    jack&nb

06724點遊戲演算法

題目描述: 給出4個1-10的數字,通過加減乘除,得到數字為24就算勝利 輸入: 4個1-10的數字。[數字允許重複,但每個數字僅允許使用一次,測試用例保證無異常數字] 輸出: true or false Java實現: import java.util.Arra

066配置檔案恢復

題目描述: 命   令 執   行 reset reset what reset board board&

108題字元統計

題目描述 如果統計的個數相同,則按照ASII碼由小到大排序輸出 。如果有其他字元,則對這些字元不用進行統計。 實現以下介面: 輸入一個字串,對字元中的各個英文字元,數字,空格進行統計(可反

108題汽水瓶

題目描述 有這樣一道智力題:“某商店規定:三個空汽水瓶可以換一瓶汽水。小張手上有十個空汽水瓶,她最多可以換多少瓶汽水喝?”答案是5瓶,方法如下:先用9個空瓶子換3瓶汽水,喝掉3瓶滿的,喝完以後4個空瓶

108題按位元組擷取字串

題目描述 編寫一個擷取字串的函式,輸入為一個字串和位元組數,輸出為按位元組擷取的字串。但是要保證漢字不被截半個,如”我ABC”4,應該截為”我AB”,輸入”我ABC漢DEF”6,應該輸出為”我ABC”