hiho 1170 機械人 記憶化搜尋 狀態壓縮

2021-07-02 18:52:10 字數 1693 閱讀 7397

時間限制:

2000ms

單點時限:

1000ms

記憶體限制:

256mb

小冰的n個機械人兄弟排成一列,每個機械人有乙個顏色。現在小冰想讓同一顏色的機械人聚在一起,即任意兩個同顏色的機械人之間沒有其他顏色的的機械人。

假設任意相鄰的兩個機械人可以交換位置,請問最少需要多少次交換?

第一行為乙個整數t,為資料組數,之後每組資料兩行。

第一行為n和k,表示機械人的個數與顏色的總數。

接下來一行n個數,第i個數表示第i個機械人的顏色,取值範圍為1到k。

對於每組資料輸出一行,形如"case #x: y"。x為資料組數,從1開始,y為最少的交換步數。

1 ≤ t ≤ 20

1 ≤ n ≤ 105

小資料1 ≤ k ≤ 3

大資料1 ≤ k ≤ 16

樣例輸入

3

4 21 2 1 2

6 42 1 4 3 1 2

8 61 3 2 5 5 4 5 2

樣例輸出

case #1: 1

case #2: 6

case #3: 5

給定乙個序列,求怎麼規定各元素順序,使逆序對數最小。

記憶化搜尋,令g[nowg]表示 前幾個元素狀態為nowg時它們間的最小逆序對數。

#include#include#include#include#include#include#include#include#includeusing namespace std;

#define for(i,n) for(int i=1;i<=n;i++)

#define fork(i,k,n) for(int i=k;i<=n;i++)

#define rep(i,n) for(int i=0;i=0;i--)

#define forp(x) for(int p=pre[x];p;p=next[p])

#define forpiter(x) for(int &p=iter[x];p;p=next[p])

#define lson (x<<1)

#define rson ((x<<1)+1)

#define mem(a) memset(a,0,sizeof(a));

#define memi(a) memset(a,127,sizeof(a));

#define memi(a) memset(a,-1,sizeof(a));

#define inf (10000000001ll)

#define f (100000007)

#define maxn (100000+10)

#define maxk (16+10)

typedef long long ll;

int a[maxn],n,k;

ll f[maxn][maxk],t[maxk][maxk];

int st[maxn];

ll g[1<<17];

ll p2[maxk];

void dfs(int l,int nowg)

dfs(l-1,v);

if (g[nowg]==-1||g[nowg]>g[v]+delta) g[nowg]=g[v]+delta;

} }int main()

g[0]=0;

dfs(k,(1<

機械人翻譯RobotHow 機械人會上網搜資訊

早在3年前,德國布萊梅大學人工智慧學院從事一項機械人專案研究,他們試圖開發出一種名為 roboearth 的雲網路,它能夠讓機械人學習其他機械人的行為。現在,該學院在此前研究的基礎之上,又有了新突破,他們開發出一種 robothow 系統,該系統能夠將網際網路資訊翻譯成機械人能夠理解的 指令 我們可...

自動化與機械人

曾經在知乎上看到這樣一篇文章,乙個俄羅斯程式設計師,生活在終端裡,只要任何事情花費時間超過了90秒,他一定會寫乙個指令碼自動化實現。比如工作日晚上九點之後這名程式設計師的運維伺服器中還有正在執行的ssh程序,就會給妻子發乙個今天加班的簡訊,並從文字庫中隨機選取一句加班理由。早上8點45分伺服器中依然...

機械人實現屠宰自動化

當 westfleisch 註冊合作社考慮在 coesfeld 肉類加工中心內自動化原有的人工屠宰裝置過程時,首先在 剔除直腸 及 切開盆腔骨及腹部 兩個流程中測試使用了兩台庫卡機械人。在此過程中,機械人主要以它工作的質量及經濟效益說服了使用者。實施措施 解決方案 測試成功以後,westfleisc...