青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

GoogleCodejam2009 Round 1C Bribe the Prisoners

Bribe the Prisoners

Problem

In a kingdom there are prison cells (numbered 1 to P) built to form a straight line segment. Cells number i and i+1 are adjacent, and prisoners in adjacent cells are called "neighbours." A wall with a window separates adjacent cells, and neighbours can communicate through that window.

All prisoners live in peace until a prisoner is released. When that happens, the released prisoner's neighbours find out, and each communicates this to his other neighbour. That prisoner passes it on to his other neighbour, and so on until they reach a prisoner with no other neighbour (because he is in cell 1, or in cell P, or the other adjacent cell is empty). A prisoner who discovers that another prisoner has been released will angrily break everything in his cell, unless he is bribed with a gold coin. So, after releasing a prisoner in cell A, all prisoners housed on either side of cell A - until cell 1, cell P or an empty cell - need to be bribed.

Assume that each prison cell is initially occupied by exactly one prisoner, and that only one prisoner can be released per day. Given the list of Q prisoners to be released in Q days, find the minimum total number of gold coins needed as bribes if the prisoners may be released in any order.

Note that each bribe only has an effect for one day. If a prisoner who was bribed yesterday hears about another released prisoner today, then he needs to be bribed again.

Input

The first line of input gives the number of cases, N. N test cases follow. Each case consists of 2 lines. The first line is formatted as

P Q
where P is the number of prison cells and Q is the number of prisoners to be released.
This will be followed by a line with Q distinct cell numbers (of the prisoners to be released), space separated, sorted in ascending order.

 

Output

For each test case, output one line in the format

Case #X: C
where X is the case number, starting from 1, and C is the minimum number of gold coins needed as bribes.

 

Limits

1 ≤ N ≤ 100
QP
Each cell number is between 1 and P, inclusive.

Small dataset

1 ≤ P ≤ 100
1 ≤ Q ≤ 5

Large dataset

1 ≤ P ≤ 10000
1 ≤ Q ≤ 100

Sample


Input
 

Output
 
2
8 1
3
20 3
3 6 14
Case #1: 7
Case #2: 35

Note

In the second sample case, you first release the person in cell 14, then cell 6, then cell 3. The number of gold coins needed is 19 + 12 + 4 = 35. If you instead release the person in cell 6 first, the cost will be 19 + 4 + 13 = 36.


題目分析:
從直覺上來說,這是一道動態規劃的題目,關鍵是如何建立狀態遞推。有一個很明顯的規律是,釋放一個牢房的犯人,只能影響到左邊第一個空的牢房和右邊第一個空的牢房,而與其它的無關。所以,釋放了一個囚犯,整個連續的牢房被分成了2段,而這兩段又都可以看成是單獨的兩個互不影響的一段,這樣,腦子里有一種很直覺的想法就是,這是一棵類似于二叉樹的結構,這顆二叉樹最后的形態就決定了最終的結果。
我們從第二個Case為例子介紹算法:
1.首先對該題所提到的監獄增加兩個cell,0號和P + 1號, 這兩個cell是不存在的,只是為了增加程序的可編寫和公式的一致,我們用一個vector v 來存儲釋放囚犯的監獄號,v按照從小到達的順序排列,如第二個例子中,v(0...4) = (0,3, 6, 14, 21)
2. 我們用F[i][j]表示 從v[i]到v[j]這一段中所需要的賄賂金最小值,那么,F[0][4]就是最后需要的結果, 代表從v[0]到v[4]也就是從(0, 21)這之間的牢房中釋放囚犯所需要的錢(不包括邊界,實際需要錢賄賂的囚犯在1到20號房子中)
3. 例如第三個例子,F[0][4] = Min(F[0][i] + F[i][3]) + (v[4] - v[0] - 2) , 其可以中i = 1, 2, 3
    可以從第三個例子中看到,無論你選擇釋放哪一個囚犯,所需的金額都是一定的,正好是這段之間住人的牢房數 - 1
4.更加抽象出最終的公式, 我們用L代表左邊界, R代表右邊界
    F[L][R] = Min(F[L][i] + F[i][R]) + v[R] - V[L] - 2,   i = L + 1, L + 2, ……R- 1,  當L + 1 != R時
    F[L][R] = 0, 當L + 1 == R時, 這個就是上面提到的二叉樹的葉子節點
   通過這個公式就可以得到最終的結果了。

 1#include <iostream>
 2#include <vector>
 3#include <queue>
 4#include <string>
 5#include <algorithm>
 6#include <set>
 7#include <map>
 8using namespace std;
 9
10#define ONLINEJUDGE
11#define MAXN 11000
12#define MAXQ 110
13#define MAXP 110
14#define MIN(a, b) ((a) < (b) ? (a):(b))
15
16int P, Q;
17vector<int> v;
18vector<int> Ret, buf;
19int F[MAXP][MAXP];
20
21int Find(int l, int r)
22{
23    if(l + 1 == r)
24    {
25        F[l][r] = 0;
26        return F[l][r];
27    }

28    if(F[l][r] >= 0return F[l][r];
29
30    int i, j;
31    int iMin;
32    iMin = 999999999;
33    for(i = l + 1; i < r; i++)
34    {
35        iMin = MIN(iMin, Find(l, i) + Find(i, r));
36    }

37    F[l][r] = iMin + v[r] - v[l] - 2;
38    return F[l][r];
39}

40
41int main()
42{
43#ifdef ONLINEJUDGE
44    freopen("C-large.in""r", stdin);
45    freopen("C-large.out""w", stdout);
46#endif
47
48    int iCaseTimes, i, j;
49    int iBuf;
50    int iMax, iRet, iMin;
51
52    scanf("%d"&iCaseTimes);
53    for(int k = 0; k < iCaseTimes; k++)
54    {
55        printf("Case #%d: ", k + 1);
56        scanf("%d%d"&P, &Q);
57        v.clear();
58        v.push_back(0);
59        for(i = 0; i < Q; i++)
60        {
61            scanf("%d"&iBuf);
62            v.push_back(iBuf);
63        }

64        v.push_back(P + 1);
65
66        iMin = 0;
67        memset(F, -1sizeof(F));
68        sort(v.begin(), v.end());
69        
70        iMin = 999999999;
71        for(i = 1; i < v.size() - 1; i++)
72        {
73            iMin = MIN(iMin, Find(0, i) + Find(i, v.size() - 1));
74        }

75        F[0][v.size() - 1= iMin + v[v.size() - 1- v[0- 2;
76        printf("%d\n", F[0][v.size() - 1]);
77    }

78    return 0;
79}

posted on 2009-09-14 19:28 Philip85517 閱讀(1456) 評論(2)  編輯 收藏 引用 所屬分類: GoogleCodeJam

評論

# re: GoogleCodejam2009 Round 1C Bribe the Prisoners[未登錄] 2009-09-15 16:09 vincent

googlecodejam啊 ..貌似是9月2日?
當天有事情沒參加..orz  回復  更多評論   

# re: GoogleCodejam2009 Round 1C Bribe the Prisoners[未登錄] 2009-09-15 23:32 Philip85517

@vincent
9月2號開始的是資格賽,這個是上個星期天的比賽。
估計Round2 是死活進不去了,太弱了……
  回復  更多評論   


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


導航

<2025年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

統計

常用鏈接

留言簿

隨筆分類

隨筆檔案

文章分類

文章檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲午夜一区二区| 亚洲女女女同性video| 美女黄毛**国产精品啪啪| 欧美主播一区二区三区| 国产日韩欧美中文| 久久精品一区二区三区四区| 欧美一级免费视频| 国产一区二区三区精品久久久| 久久精品国产精品亚洲| 久久久久久色| 一本久久a久久精品亚洲| 亚洲精选久久| 国产女人精品视频| 免费观看亚洲视频大全| 欧美黄色日本| 午夜精品久久久久| 久久黄金**| 日韩网站在线看片你懂的| aa亚洲婷婷| 国产一区清纯| 91久久午夜| 国产精品视频久久| 久久女同互慰一区二区三区| 欧美电影打屁股sp| 欧美制服丝袜| 欧美激情第8页| 一区二区日韩| 激情综合久久| 亚洲综合精品| 亚洲东热激情| 国产精品资源在线观看| 欧美aⅴ99久久黑人专区| 欧美三区在线视频| 久久视频免费观看| 欧美香蕉大胸在线视频观看| 久久综合九色综合欧美就去吻| 欧美精品日本| 老司机成人网| 国产精品亚洲综合久久| 欧美电影在线观看完整版| 国产精品女人网站| 毛片基地黄久久久久久天堂| 欧美午夜免费| 亚洲福利视频二区| 黄色一区二区三区四区| 一本久道久久综合中文字幕| 亚洲国产第一页| 亚洲亚洲精品在线观看| 最新日韩精品| 久久天天综合| 久久不射中文字幕| 国产精品多人| 一本到12不卡视频在线dvd| 最新国产成人av网站网址麻豆| 香蕉久久夜色精品国产| 亚洲自拍啪啪| 欧美日韩国产成人高清视频| 欧美顶级少妇做爰| 尤物网精品视频| 久久国产精品久久久| 久久精品欧美日韩| 国产欧美精品在线观看| 亚洲免费视频成人| 欧美一区二区免费| 国产精品永久入口久久久| 一区二区三区国产| 亚洲欧美变态国产另类| 国产精品久久久久高潮| 日韩小视频在线观看专区| 一区二区免费看| 欧美日韩国产专区| 日韩视频免费大全中文字幕| 亚洲婷婷免费| 国产精品久久久久久亚洲毛片 | 国产乱人伦精品一区二区 | 亚洲午夜三级在线| 亚欧成人精品| 国产一区二区三区久久悠悠色av| 亚洲欧洲av一区二区三区久久| 亚洲欧美日韩精品久久奇米色影视 | 欧美一级午夜免费电影| 国产精品午夜视频| 久久精品成人一区二区三区| 乱中年女人伦av一区二区| 亚洲第一在线视频| 欧美大片免费观看在线观看网站推荐| 欧美高清日韩| 亚洲一区二区三区777| 国产精品美女久久久久av超清| 亚洲欧美日韩国产一区二区| 久久先锋影音av| 日韩一级网站| 国产人成一区二区三区影院| 久久视频精品在线| 一区二区高清视频在线观看| 久久成人精品电影| 亚洲韩国精品一区| 欧美亚日韩国产aⅴ精品中极品| 亚洲欧美在线一区| 欧美成人日韩| 亚洲一区二区三区色| 韩国女主播一区| 欧美色综合天天久久综合精品| 亚洲综合精品自拍| 欧美激情一区二区三区在线视频| 这里只有精品丝袜| 黄色国产精品| 欧美三区不卡| 久久视频国产精品免费视频在线 | 欧美在线视频a| 亚洲破处大片| 国产综合视频| 欧美性事在线| 欧美成人精品福利| 久久精品国产v日韩v亚洲 | 99国产欧美久久久精品| 久久久久欧美精品| 亚洲欧美激情一区| 99爱精品视频| 在线国产精品一区| 国产麻豆精品久久一二三| 欧美高清视频www夜色资源网| 亚洲欧美日韩视频一区| 亚洲美女av在线播放| 欧美成人精品1314www| 亚洲免费在线| 亚洲一区二区三区在线视频| 亚洲欧洲日韩综合二区| 在线电影国产精品| 国产日韩一区二区三区在线| 欧美日本簧片| 欧美福利电影在线观看| 久久综合五月天婷婷伊人| 欧美影院午夜播放| 性欧美videos另类喷潮| 亚洲综合视频网| 亚洲综合丁香| 亚洲在线成人精品| 亚洲一区日韩| 亚洲欧美www| 亚洲一区日本| 香蕉视频成人在线观看| 亚洲欧美日韩一区二区三区在线| 国产精品99久久久久久人 | 久久久久久久网| 久久久久久9999| 久久精品一区二区国产| 欧美中文字幕在线播放| 欧美在线一级va免费观看| 久久精品亚洲一区二区| 久久久久久9| 麻豆精品传媒视频| 欧美激情91| 亚洲精品美女| 一区二区三区欧美视频| 亚洲制服av| 久久精品人人爽| 免费欧美日韩国产三级电影| 欧美激情精品久久久久久蜜臀| 欧美二区在线播放| 欧美网站在线| 韩国一区二区三区在线观看| 一区二区三区无毛| 日韩网站在线观看| 午夜精品福利一区二区三区av | 久久福利精品| 久久久久久一区二区三区| 欧美成人tv| 日韩一级成人av| 亚洲欧美不卡| 免费的成人av| 国产精品免费一区豆花| 在线看日韩欧美| 一本高清dvd不卡在线观看| 亚洲欧美日韩在线高清直播| 久久久www| 亚洲毛片av| 久久婷婷国产麻豆91天堂| 欧美日韩精品欧美日韩精品| 国产午夜精品麻豆| 亚洲精品一区二区三区四区高清 | 99国产精品久久| 午夜一区不卡| 亚洲黄色在线观看| 欧美在线一二三区| 欧美日产在线观看| 黄色国产精品| 欧美亚洲一区二区在线| 欧美激情第五页| 羞羞答答国产精品www一本 | 亚洲一级二级| 久久综合一区| 国产日产精品一区二区三区四区的观看方式| 一区精品在线| 先锋影音网一区二区| 亚洲人成7777| 久久亚洲私人国产精品va媚药| 国产精品免费观看视频| 亚洲精品日韩在线观看| 久久久久久成人|