演算法課設(巨水)和一些吐槽

2021-10-08 00:07:14 字數 3482 閱讀 6543

首先我要吐槽一下,大二下學期的課程才有演算法,而且學的都是人家初中生玩剩下的普及組的題,這個課程安排真的是有毛病。先學資料結構和演算法,把硬體(數字邏輯、計算機組成原理)和經濟學原理、管理學這些沒什麼用的課程砍掉不香嗎?講道理,大學的計科專業真的是什麼都學,什麼都不精,包括一些 我認為 沒什麼用的課(我不喜歡硬體和背書),浪費時間。這麼一看,一直在學acm確實挺好的,現在看這些題覺得特別傻。

隨便吐槽一下,反正這文章也沒幾個人能看到。

#include

using

namespace std;

const

int n=35;

int n,x[n+10]

;bool vis[n+10]

,isprime[n+10]

;bool

judge

(int x)

// 判斷是否為素數

void

get_prime()

// 打表isprime陣列

void

out(

int x)

void

dfs(

int k)

for(

int i=

2;i<=n;i++)}

}int

main()

}return0;

}

方法一,比較樸素的遞迴分治:

#include

using

namespace std;

int n,sum=1;

void

dfs(

int x)

else sum++;}

}}intmain()

/*2000000000

ans:1223682048

1000000000

ans:374416128

12=12 sum=1

12=2*6=6*2 sum+=2

12=2*(2*3)=(2*3)*2 sum+=2

12=3*4=4*3 sum+=2

12=3*(2*2)=(2*2)*3[重複] sum+=1

最後,sum=8

36=36 sum=1

36=2*18 sum+=2

18=2*9 sum+=2

9=3*3 sum+=1

18=3*6 sum+=2

6=2*3 sum+=2

36=3*12 sum+=2

12=2*6 sum+=2

6=2*3 sum+=2

12=3*4 sum+=2

4=2*2 sum+=1

36=4*9 sum+=2

4=2*2 sum+=1

9=3*3 sum+=1

36=6*6 sum+=1

6=2*3 sum+=2

26*/

實際上2e9肯定超時了,資料比較弱,能過。

方法二,記憶化搜尋,0ms ac:

#include

using

namespace std;

int n;

map<

int,

int>dp;

// dp記錄搜尋過的值,下次遇見就不再搜尋

intdfs

(int x)

// dp[x]與dfs(x)返回值相等

} dp[x]

=sum;

return dp[x];}

intmain()

/*2000000000

ans:1223682048

*/

給定乙個矩陣m,從左上角開始每次只能向右走或者向下走,最後達到右下角的位置,路徑中所有數字累加起來就是路徑和,返回所有路徑的最小路徑和,如果給定的m如下,那麼路徑1,3,1,0,6,1,0就是最小路徑和,返回12.

1 3 5 9

8 1 3 4

5 0 6 1

8 8 4 0

#include

using

namespace std;

const

int n=

1e3+10;

int n,m,dp[n]

[n],a[n]

[n];

struct node

path[n]

[n],ans[n*n]

;int

main()

;}else;}

else;}

}}}printf

("最短距離:%d\n"

,dp[n]

[m])

;int x=n,y=m,cnt=0;

while

(x>

0&&y>0)

;int tx=x,ty=y;

//printf("%d %d\n",x,y);

x=path[tx]

[ty]

.x; y=path[tx]

[ty]

.y;}

printf

("\n最短路徑:\n");

for(

int i=cnt;i>=

1;i--

)printf

("(%d,%d)\n"

,ans[i]

.x,ans[i]

.y);

return0;

}/*4 41 3 5 9

8 1 3 4

5 0 6 1

8 8 4 0

ans:

最短距離:12

最短路徑:

(1,1)

(1,2)

(2,2)

(3,2)

(3,3)

(3,4)

(4,4)

*/

檔案連線問題:給定乙個大小為n的陣列f,陣列元素f[i]表示第i個檔案的長度。現在需要將所有檔案合併成乙個檔案,檔案越長後面連線成新檔案花費的時間越長,試給出貪心演算法給出檔案連線順序,保證連線檔案花費的時間最短。

時間是應該按每次合併兩個檔案的長度之和來算,就是類似於合併果子問題,**如下:

#include

using

namespace std;

const

int n=

1e6+5;

int t[n]

;priority_queue<

int,vector<

int>

,greater<

int>

>q;

intmain()

int sum=0;

while

(q.size()

>1)

cout<<

"合併這些檔案的最短時間為"

}/*41

634ans:26

*/

一些吐槽 1

今天我吐槽一下頻繁使用的兩個軟體,屬於是不吐 不快的那種。這是乙個 系統軟體。有快半年了罷,我對它體驗的感受就是 win10 lite。稱為lite乙個原因是ui更幼了。雖然大家都說是像蘋果致敬。另外乙個就是把太多東西化簡為繁了,感覺起來卻像是閹割了不少功能。這個是 窗戶 11 的資料夾介面。雀食是...

go語言的一些吐槽

struct的方法,如果receiver非指標,則呼叫這個方法無法改變物件狀態,因為傳遞給方法的物件是原物件的乙個拷貝,所有的改變都被作用在這個拷貝上而非原物件上.type st struct func this st show func this st increase func main b.i...

吐槽VS2013 C 編輯器的一些「BUG」

使用vs2013已有一段時間了,在其針對c 11支援力度表示肯定的同時,也有一些個人認為不足之處,在這裡列出來,望大家批評指正。下圖就是關於vs2013對c 編輯器新增功能,主要是一些關於 格式化的設定,讓程式設計師可以更方便的設定適合自己團隊的 風格 在這裡主要說一下switch case語句格式...