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

A Za, A Za, Fighting...

堅信:勤能補拙

PKU 1167 The Buses

問題:
http://acm.pku.edu.cn/JudgeOnline/problem?id=1167

參考:
http://angels1.0.blog.163.com/blog/static/84580504200892072639857/

思路:
這題比我想象的要難好多,可以說,在看了別人AC代碼之后,發現已經超越了我目前的能力
我自己的想法很簡單,暴力搜索每條可能的路線,枚舉每條路線的前兩個點,DFS,結果始終是TLE

正確思路:
特別需要注意理解清楚題意:Buses on the same route arrive at regular intervals from 12:00 to 12:59 throughout the entire hour. 
如果找出前兩個點,那么這條路徑上的后續點也必須存在
對輸入進行預處理,找出所有可能的路徑,并且按照路徑中點的個數的多少降序排列(因為題意要求使得路線盡可能的少,所以首先搜索包含點個數最多的路徑)
另外,還有一些簡單的數學推導:
start - interval < 0 (1)  [點start之前不能存在其他點]
59 - interval > start (2)
根據(1), (1)我們就可以知道start <= 29

代碼中還有一處非常重要的減枝(不剪就會TLE):
只寫 r_cnt+1>=min還是會TLE
1         /* important pruning */
2         if(r_cnt+1+(left-routes[k].stops)/routes[k].stops >= min)
3             return;
4 

代碼(TLE):
 1 void
 2 dfs(int begin, int cur_routes)
 3 {
 4     int i, j, k, diff, cur, next=-1;
 5     if(cur_routes>MAX_ROUTES || cur_routes>=min)
 6         return;
 7     if(begin == -1) {
 8         min = cur_routes;
 9         return;
10     }
11     --tm[begin];
12     cur = begin;
13     for(i=cur+1; i<MAX_T; i++) {
14         if(tm[i]) {
15             diff = i - begin;
16             /* check */
17             for(j=i; j<MAX_T; j+=diff)
18                 if(!tm[j])
19                     break;
20             if(j<MAX_T)
21                 continue;
22 
23             for(j=i; tm[j]&&j<MAX_T; j+=diff)
24                 --tm[j];
25             for(k=begin+1; k<MAX_T/2; k++)
26                 if(tm[k] && next==-1
27                     next = k;
28             dfs(next, cur_routes+1);
29             for(j=i; j<MAX_T; j+=diff)
30                 ++tm[j];
31             cur = i;
32         }
33     }
34     ++tm[begin];
35 }

代碼:
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 #define MAX_R 910
 5 #define MAX_T 60
 6 #define MAX_RT 17
 7 struct Route {
 8     int begin;
 9     int interval;
10     int stops;
11 } routes[MAX_R];
12 int cnt, left, n, min, tm[MAX_T];
13 
14 int 
15 compare(const void *arg1, const void *arg2)
16 {
17     return ((struct Route *)arg2)->stops - ((struct Route *)arg1)->stops;
18 }
19 
20 int
21 check(int begin, int interval)
22 {
23     int i;
24     for(i=begin; i<MAX_T; i+=interval)
25         if(!tm[i])
26             return 0;
27     return 1;
28 }
29 
30 void
31 init()
32 {
33     int i, j, tmp;
34     min = MAX_RT + 1;
35     cnt = 0;
36     left = n;
37     memset(tm, 0sizeof(tm));
38     for(i=0; i<n; i++) {
39         scanf("%d"&tmp);
40         ++tm[tmp];
41     }
42     for(i=0; i<29; i++) { /* 0<=begin<=29 */
43         if(tm[i]) {
44             for(j=i+1; j<59-i; j++
45                 if(check(i, j)) {
46                     routes[cnt].begin = i;
47                     routes[cnt].interval = j;
48                     routes[cnt++].stops = 1 + (59-i)/j;
49                 }
50         }
51     }
52     qsort(routes, cnt, sizeof(struct Route), compare); /* descend order */
53 }
54 
55 void
56 dfs(int index, int r_cnt)
57 {
58     int i, k, j;
59     if(left == 0) {
60         min = min<r_cnt ? min : r_cnt;
61         return;
62     }
63     for(i=index; i<cnt&&routes[i].stops>left; i++);
64     for(k=i; k<cnt; k++) {
65         /* important pruning */
66         if(r_cnt+1+(left-routes[k].stops)/routes[k].stops >= min)
67             return;
68 
69         if(check(routes[k].begin, routes[k].interval)) {
70             for(j=routes[k].begin; j<MAX_T; j+=routes[k].interval) {
71                 --tm[j];
72                 --left;
73             }
74             dfs(k, r_cnt+1);
75             for(j=routes[k].begin; j<MAX_T; j+=routes[k].interval) {
76                 ++tm[j];
77                 ++left;
78             }
79         }
80     }
81 }
82 
83 int
84 main(int argc, char **argv)
85 {
86     while(scanf("%d"&n) != EOF) {
87         init();
88         dfs(00);
89         printf("%d\n", min);
90     }
91 }

posted on 2010-09-08 16:59 simplyzhao 閱讀(488) 評論(0)  編輯 收藏 引用 所屬分類: B_搜索

導航

<2011年10月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

統計

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美制服丝袜第一页| 老巨人导航500精品| 在线播放日韩| 在线成人免费观看| 99精品视频免费全部在线| 欧美一级日韩一级| 激情一区二区三区| 国产精品久久久久aaaa樱花| 久久亚洲精品一区二区| 一区二区三区精品在线| 亚洲电影免费观看高清完整版在线观看| 影音先锋久久久| 欧美午夜国产| 欧美电影在线观看完整版| 亚洲淫片在线视频| 一本久久综合亚洲鲁鲁| 久热成人在线视频| 亚洲伊人网站| 99ri日韩精品视频| 国产日韩视频| 国产精品一区二区在线观看| 久久人人爽人人爽爽久久| 欧美顶级艳妇交换群宴| 国产啪精品视频| 欧美日韩综合视频| 欧美日韩国产色视频| 另类尿喷潮videofree | 美国成人直播| 亚洲婷婷综合色高清在线| 欧美国产亚洲视频| 亚洲乱码日产精品bd| 国产资源精品在线观看| 欧美性一二三区| 欧美国产欧美亚洲国产日韩mv天天看完整 | …久久精品99久久香蕉国产| 欧美色网在线| 久久久久久久成人| 小处雏高清一区二区三区 | 亚洲欧美日韩精品在线| 亚洲国产影院| 亚洲日本中文| 亚洲精品视频在线| 亚洲精品欧美日韩专区| 91久久在线观看| 91久久久久久| 99国产精品私拍| 一本久道久久综合中文字幕| 亚洲乱码国产乱码精品精天堂 | 欧美一区二区三区四区高清| 欧美日韩一区二区三区在线观看免 | 亚洲人午夜精品免费| 亚洲欧洲99久久| 欧美精品免费视频| 亚洲国产乱码最新视频| 久久久久亚洲综合| 欧美亚洲自偷自偷| 国产日韩欧美一区在线| 久久中文在线| 91久久精品日日躁夜夜躁国产| 欧美在线国产精品| 在线中文字幕日韩| 欧美视频在线一区| 亚洲天堂久久| 亚洲欧洲精品一区二区三区不卡 | 亚洲免费一在线| 一本色道久久综合亚洲精品高清| 欧美韩日亚洲| 亚洲精品之草原avav久久| 欧美国产乱视频| 欧美a级片网站| 亚洲日本成人女熟在线观看| 亚洲高清毛片| 欧美精选午夜久久久乱码6080| 亚洲欧洲一区二区三区久久| 欧美高清在线| 欧美精品一区二区在线播放| 亚洲无玛一区| 欧美在线免费视频| 最近中文字幕日韩精品| 亚洲国产视频一区| 欧美电影免费观看大全| 一本久久综合| 国产精品欧美日韩久久| 欧美一区二区三区久久精品| 香蕉乱码成人久久天堂爱免费| 国产一区香蕉久久| 欧美国内亚洲| 美女精品在线| 一区二区欧美精品| 亚洲性视频h| 国语精品中文字幕| 欧美激情精品久久久久久| 欧美精品久久久久久| 午夜精品一区二区三区电影天堂 | 欧美在线观看网站| 久久久亚洲影院你懂的| 9l国产精品久久久久麻豆| 亚洲性视频h| 在线免费日韩片| 一本大道av伊人久久综合| 国产视频精品xxxx| 亚洲欧洲一区二区天堂久久| 国产精品一区二区男女羞羞无遮挡| 久久久噜噜噜久久久| 欧美激情一区二区三区在线| 午夜精品视频在线观看一区二区 | 日韩视频一区二区三区在线播放免费观看 | 一区二区三区四区五区在线| 国产精品嫩草影院一区二区| 欧美国产三区| 国产精品久久午夜夜伦鲁鲁| 久久亚洲一区| 欧美日韩调教| 免费不卡在线视频| 国产精品成人国产乱一区| 麻豆成人综合网| 欧美日韩在线电影| 欧美1级日本1级| 国产伦精品一区二区三区免费 | 国产精品大片免费观看| 欧美顶级少妇做爰| 国产欧美视频一区二区| 亚洲高清视频一区| 国产午夜精品麻豆| 亚洲欧美成人一区二区三区| 99精品视频一区二区三区| 久久久91精品国产| 欧美伊人久久大香线蕉综合69| 中文亚洲字幕| 美女免费视频一区| 鲁大师成人一区二区三区 | 亚洲国产精品成人久久综合一区 | 亚洲一区二区三区中文字幕 | 欧美在线www| 老色批av在线精品| 老巨人导航500精品| 国产亚洲二区| 亚洲一区视频在线观看视频| 亚洲日韩欧美视频一区| 亚洲一区二区三区在线看| 欧美经典一区二区三区| 免费不卡在线视频| 国产一区二区三区观看| 亚洲欧美另类在线观看| 亚洲欧美日韩专区| 国产精品女主播| 亚洲免费中文| 久久成人综合网| 黑人一区二区| 久久综合色播五月| 亚洲大胆视频| 亚洲国产精品久久久久婷婷884| 久久久精品性| 欧美国产日韩a欧美在线观看| 一区国产精品| 欧美1级日本1级| 亚洲三级电影全部在线观看高清 | 国产精品实拍| 欧美一级成年大片在线观看| 国产精品久久二区| 午夜精品影院| 欧美成人资源网| 国产精品99久久久久久宅男 | 亚洲美女黄网| 欧美日韩精品一本二本三本| 在线视频亚洲欧美| 久久综合给合| 亚洲免费激情| 国产欧美亚洲精品| 男女精品网站| 亚洲一区二区三区欧美| 久久五月天婷婷| 夜夜嗨av一区二区三区网页| 国产欧美韩日| 欧美成人中文| 午夜亚洲性色视频| 最新国产乱人伦偷精品免费网站 | 亚洲国产欧美一区二区三区久久 | 亚洲国产欧美日韩精品| 欧美激情一区二区三区在线视频观看| 中日韩男男gay无套| 免费久久99精品国产自| 一区二区三区欧美视频| 国产一区二区中文| 欧美日韩精品高清| 久久精品夜色噜噜亚洲a∨ | 欧美精品一区二区久久婷婷| aa亚洲婷婷| 毛片av中文字幕一区二区| 亚洲自拍偷拍福利| 亚洲人屁股眼子交8| 国产午夜精品美女毛片视频| 欧美日韩国产成人精品| 久久综合国产精品| 亚洲午夜国产一区99re久久| 欧美电影免费观看| 久久久久久夜精品精品免费| 在线视频免费在线观看一区二区| 狠狠久久综合婷婷不卡| 欧美午夜片在线观看|