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

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.


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

 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 閱讀(1451) 評論(2)  編輯 收藏 引用 所屬分類: GoogleCodeJam

評論

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

googlecodejam啊 ..貌似是9月2日?
當(dāng)天有事情沒參加..orz  回復(fù)  更多評論   

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

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


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


導(dǎo)航

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

統(tǒng)計(jì)

常用鏈接

留言簿

隨筆分類

隨筆檔案

文章分類

文章檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美另类视频| 黄色国产精品| 亚洲一区二区三区四区中文| 免费看成人av| 麻豆av一区二区三区| 久久久久久亚洲精品中文字幕 | 久久精品国产亚洲aⅴ| 亚洲一区二区三| 欧美一级夜夜爽| 女仆av观看一区| 美日韩免费视频| 欧美精品久久久久久久| 国产精品一区免费在线观看| 国产一区自拍视频| 亚洲美女福利视频网站| 亚洲天天影视| 女人天堂亚洲aⅴ在线观看| 亚洲欧洲午夜| 最新日韩精品| 亚洲欧美一区二区激情| 久久亚洲欧美| 国产精品久久久久一区| 一区二区三区亚洲| 亚洲在线中文字幕| 久久蜜桃资源一区二区老牛 | 亚洲精品影视| 亚洲永久在线| 欧美成人午夜激情视频| 欧美视频在线观看| 在线观看一区二区视频| 午夜日韩视频| 亚洲毛片在线观看.| 欧美一级播放| 欧美日韩精品伦理作品在线免费观看| 亚洲一区bb| 久久精品一区二区| 麻豆国产va免费精品高清在线| 亚洲欧美电影院| 久久久久在线观看| 99热免费精品在线观看| 久久久99爱| 国产精品久久久久久av下载红粉 | 欧美日韩和欧美的一区二区| 国产精品视频一二三| 亚洲二区免费| 久久一区二区视频| 欧美在线啊v| 国产欧美一区二区精品婷婷| 在线一区亚洲| 亚洲精品女人| 欧美一区二区三区四区夜夜大片 | 在线视频一区二区| 久久国产高清| 国产精品久久久久久久午夜 | 欧美刺激午夜性久久久久久久| 欧美专区第一页| 欧美小视频在线| 亚洲精品一区二区三区婷婷月| 伊人色综合久久天天| 一本色道久久88亚洲综合88| 久久亚裔精品欧美| 久久不射2019中文字幕| 国产色产综合色产在线视频| 午夜精品美女自拍福到在线 | 亚洲午夜激情| 亚洲国产日韩美| 欧美a级在线| 亚洲日本在线观看| 亚洲精品国产精品国自产在线| 亚洲伦理在线观看| 欧美精品在线视频观看| 日韩视频免费大全中文字幕| 亚洲精品黄色| 国产精品久久久久久久久免费桃花 | 在线成人av| 久热re这里精品视频在线6| 欧美电影在线| 亚洲一级特黄| 亚洲精品免费一区二区三区| 欧美日本韩国一区二区三区| 一本色道久久综合亚洲精品小说 | 欧美天天综合网| 亚洲一区免费观看| 亚洲欧美日韩爽爽影院| 国产亚洲高清视频| 麻豆视频一区二区| 欧美日韩国产高清| 亚洲少妇中出一区| 久久大逼视频| 亚洲精品美女在线| 亚洲无限av看| 尹人成人综合网| 日韩一区二区免费看| 国产日韩视频| 亚洲欧洲日本国产| 国产一区二区黄| 亚洲国产女人aaa毛片在线| 国产精品腿扒开做爽爽爽挤奶网站| 在线高清一区| 亚洲精品美女久久久久| 国产日韩欧美自拍| 亚洲国产精品激情在线观看| 欧美日韩综合视频网址| 久久在线91| 国产精品你懂的在线欣赏| 欧美激情精品久久久| 国产精品入口日韩视频大尺度| 亚洲视频网在线直播| 欧美一区二区三区四区视频| 99riav1国产精品视频| 亚洲影院在线观看| 亚洲片区在线| 西瓜成人精品人成网站| aa国产精品| 久久艳片www.17c.com| 欧美一区二区三区久久精品茉莉花 | 久久五月天婷婷| 欧美色另类天堂2015| 亚洲电影第三页| 尤物精品在线| 午夜综合激情| 性久久久久久久| 欧美日韩www| 亚洲激情国产精品| 久久综合综合久久综合| 久久在线免费| 国产综合自拍| 久久久久99精品国产片| 久久精品国产一区二区三| 国产精品久久福利| 99精品热视频只有精品10| 亚洲看片一区| 欧美国产极速在线| 在线看片欧美| 久久五月天婷婷| 国产午夜精品理论片a级大结局| 一本大道久久a久久精二百| 久久本道综合色狠狠五月| 亚洲免费中文| 国产精品麻豆va在线播放| 一区二区三区欧美成人| 亚洲深夜福利网站| 欧美日韩91| 一区二区高清在线| 亚洲自拍偷拍一区| 国产精品国色综合久久| 一区二区不卡在线视频 午夜欧美不卡在 | 狠久久av成人天堂| 亚洲欧美国产va在线影院| 亚洲欧美日韩一区二区| 国产精品女人毛片| 欧美一区二区三区视频免费| 久热精品在线| 亚洲国产另类久久久精品极度| 制服丝袜亚洲播放| 亚洲欧美视频在线观看视频| 欧美视频一区二区三区在线观看| 久久国产精品亚洲77777| 国产精品午夜av在线| 亚洲欧美视频在线观看| 久久一区精品| 一本在线高清不卡dvd | 欧美激情一区在线| 夜夜嗨av一区二区三区四区| 国产精品欧美日韩一区二区| 午夜国产精品影院在线观看| 久久久久天天天天| 日韩系列在线| 海角社区69精品视频| 美女诱惑一区| 日韩视频中文字幕| 久久久精品2019中文字幕神马| 欧美日韩美女在线观看| 亚洲线精品一区二区三区八戒| 亚洲大胆人体视频| 欧美日韩另类在线| 久久九九国产精品| 亚洲福利视频二区| 性欧美大战久久久久久久免费观看| 欧美激情一区二区三级高清视频| 久久精品国产清自在天天线 | 亚洲欧美日韩综合国产aⅴ| 猛男gaygay欧美视频| 亚洲天堂成人在线观看| 黑人操亚洲美女惩罚| 国产精品爱久久久久久久| 乱人伦精品视频在线观看| 9色国产精品| 亚洲国产日韩一区二区| 久久久国产成人精品| 一区二区三区精密机械公司| **性色生活片久久毛片| 国产免费一区二区三区香蕉精| 99热免费精品| 亚洲第一成人在线| 美脚丝袜一区二区三区在线观看 | 国产精品网站在线| 久久久国产精品一区| 99re国产精品| 亚洲国产成人久久|