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