整體分析
1(集合刪數)
題目大意
問題描述:
乙個集合有如下元素:1是集合元素;若p是集合的元素,則2 * p +1,4*p+5也是集合的元素,取出此集合中最小的k個元素,按從小到大的順序組合成乙個多位數,現要求從中刪除m個數字上的數字,使得剩下的數字最大,程式設計輸出刪除前和刪除後的多位數字。
注:不存在所有數被刪除的情況`
輸入格式:
輸入的僅一行,k,m的值,k,m均小於等於30000。
輸出格式:
輸出為兩行,第一行為刪除前的數字,第二行為刪除後的數字。
樣例輸入:
5 4樣例輸出:
用到的資料結構,演算法
貪心,字串處理,打表一類的……
正確分析
首先要產生這個集合,可以打表,也可以先有現用的陣列裡的數字產生。每次的元素只有可能有已有的元素通過兩種運算產生,所以我們每次產生兩個元素,取其小者即可。接下來就是貪心策略的使用了,顯然要去找比較大的元素,那麼我們為了滿足刪除一部分數之後,剩下的數能滿足要求,那麼每個數的取值是被限制在產生的數的乙個確定的區間中的。每次在選取乙個數後,我們就將區間起點移動到這個數的位置,區間的尾端只和選取的數的個數有關。那麼通過n-m次的選取,我們就會得到乙個最大值
錯誤原因
打表時出現錯誤。打的表不夠大,沒有選取目標元素。
貪心策略不是很優秀,效率較低。
反思在打表時,有的時候要涉及到排序 ,那麼就需要將打表的範圍擴大到要求的範圍之外,然後再選取需要的元素。
貪心策略就是一種積累,既然貪心,就要追求高效
varbiao:array[0..600000] of longint;
s,numb:ansistring;
n,i,last,k,m,j,a,b,l,w,t:longint;
max:char;
function min(a,b:longint):longint;
begin
if amax then
begin
max:=s[i];
w:=i;
end;
write(max);
end;
close(input);
close(output);
end.
2(durle)
題目大意
對任意給定的m(m∈n+)和n(n∈n+),滿足m1,使得k´a∈p,則修改p為:p=p- ,並稱該d規則具有分值a。現要求編制乙個程式,對輸入的m,n值,構造相應的初始集合p,對p每應用一次d規則就累加其相應的分值,求能得到最大累加分值的d規則序列,輸出每次使用d規則時的分值和集合p的變化過程。
輸入格式:
輸入僅一行,m,n的值。
輸出格式:
輸出每次使用d規則時的分值和集合p的變化過程(即變化後的集合內所有的數,每個數用空格隔開),注意d後面有個空格,冒號後面有個空格。如果沒有一次可以變化就輸出0。
樣例輸入:
(1)1 10
(2)56 57
樣例輸出:
(1)5 : 1 2 3 4 6 7 8 9
4 : 1 2 3 6 7 9
2 : 1 3 7 9
3 : 1 7
1 :(2)
用到的資料結構,演算法
模擬,貪心
正確分析
正確分析題目要求和樣例,我們知道,對於給定的乙個區間裡的數,如果存在乙個數是另外幾個數的約數,我們就繼續進行操作。那麼如過乙個數擁有的倍數的個數和另乙個數相同,那麼我們選擇較大的那個元素。如果倍數的個數不同,那麼我們選擇倍數個數較少的元素。
錯誤原因
沒有選擇正確的貪心策略,沒有正確的理解題意
反思仔細分析題意根據題目的資訊,來推導演算法,有的時候,找不到合適的演算法就按照題目的要求模擬就可以。
program liukee;
var a:array[0..100] of longint;
f:array[0..100] of longint;
m,n,i,sum,min,j,k:longint;
flag:boolean;
begin
assign(input,'drule.in');
reset(input);
assign(output,'drule.out');
rewrite(output);
readln(m,n);
if n=m+1 then
begin
writeln(0);
close(input);
close(output);
halt;
end;
for i:=m to n do
f[i]:=true;
flag:=false;
sum:=n-m+1;
while sum>0 do
begin
fillchar(a,sizeof(a),0);
min:=maxlongint;
for i:=m to n do
if f[i] then
for j:=m to n do
if f[j] then
if (i<>j)and(j mod i=0) then
inc(a[i]);
for i:=n downto m do
if (a[i]<>0)and(a[i]
日誌11月9日
今天學習訪問屬性 完整例項 例項class employee 所有員工的基類 empcount 0def init self,name,salary self.name name self.salary salary employee.empcount 1def displaycount self ...
9月11日培訓日記
1.講解了mysql的安裝,對安裝介面提示資訊進行了解釋,例如,資料庫伺服器程式與客戶端程式的工作關係,資料庫伺服器程式與資料庫空間的關係,mysql innodb和myisam儲存引擎的區別,事務的概念 一些過程要能同生同死,針對我們的專案,用到事務?發license和扣減貨幣 olap與oltp...
9月11日培訓日記
1.講解了mysql的安裝,對安裝介面提示資訊進行了解釋,例如,資料庫伺服器程式與客戶端程式的工作關係,資料庫伺服器程式與資料庫空間的關係,mysql innodb和myisam儲存引擎的區別,事務的概念 一些過程要能同生同死,針對我們的專案,用到事務?發license和扣減貨幣 olap與oltp...