• <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>

            zoj3620

            Escape Time II

            Time Limit: 2 Seconds      Memory Limit: 65536 KB

            There is a fire in LTR ’ s home again. The fire can destroy all the things in t seconds, so LTR has to escape in t seconds. But there are some jewels in LTR ’ s rooms, LTR love jewels very much so he wants to take his jewels as many as possible before he goes to the exit. Assume that the ith room has ji jewels. At the beginning LTR is in room s, and the exit is in room e.

            Your job is to find a way that LTR can go to the exit in time and take his jewels as many as possible.

            Input

            There are multiple test cases.
            For each test case:
            The 1st line contains 3 integers n (2 ≤ n ≤ 10), m, t (1 ≤ t ≤ 1000000) indicating the number of rooms, the number of edges between rooms and the escape time.
            The 2nd line contains 2 integers s and e, indicating the starting room and the exit.
            The 3rd line contains n integers, the ith interger ji (1 ≤ ji ≤ 1000000) indicating the number of jewels in the ith room.
            The next m lines, every line contains 3 integers a, b, c, indicating that there is a way between room a and room b and it will take c (1 ≤ ct) seconds.

            Output

            For each test cases, you should print one line contains one integer the maximum number of jewels that LTR can take. If LTR can not reach the exit in time then output 0 instead.

            Sample Input

            3 3 5 0 2 10 10 10 0 1 1  0 2 2 1 2 3 5 7 9 0 3 10 20 20 30 20 0 1 2 1 3 5 0 3 3 2 3 2 1 2 5 1 4 4 3 4 2

            Sample Output

            30 80

            Author: FU, Yujun
            Contest: ZOJ Monthly, June 2012

            狀態搜索,
            搜索寫了不少,但是以前幾乎沒寫過這一類的題目,
            要開始練搜索啊

            code
            #include <cstdio>
            #include 
            <cstdlib>
            #include 
            <cstring>
            #include 
            <cmath>
            #include 
            <ctime>
            #include 
            <cassert>
            #include 
            <iostream>
            #include 
            <sstream>
            #include 
            <fstream>
            #include 
            <map>
            #include 
            <set>
            #include 
            <vector>
            #include 
            <queue>
            #include 
            <algorithm>
            #include 
            <iomanip>
            #define maxn 15
            #define inf 1000000000
            using namespace std;
            int mp[maxn][maxn];
            int t,n,m,s,e,ti,x,y;
            int a[maxn];
            long long ans;
            struct node
            {
                
            int v,st,val,ti;
            } tmp,tmp1;
            queue
            <node> q;
            int head,tail;
            int get[15][1024];
            int mt[15][1024];
            int max(int a,int b)
            {
                
            return a>b?a:b;
            }
            int main()
            {
                
            int res;
                
            while(scanf("%d%d%d",&n,&m,&t)!=EOF)
                {
                    scanf(
            "%d%d",&s,&e);
                    
            for(int i=0; i<n; i++) scanf("%d",&a[i]);
                    
            for(int i=0; i<n; i++)
                    {
                        
            for(int j=i+1; j<n; j++)
                            mp[i][j]
            =mp[j][i]=inf;
                    }
                    
            for(int i=1; i<=m; i++)
                    {
                        scanf(
            "%d%d%d",&x,&y,&ti);
                        
            if(ti<mp[x][y])
                        {
                            mp[x][y]
            =ti;
                            mp[y][x]
            =ti;
                        }
                    }
                    memset(
            get,0,sizeof(get));//這地方老是順手寫成sizeof(0)
                    for(int i=0; i<n; i++)
                    {
                        
            for(int j=0; j<(1<<n); j++)
                        {
                            mt[i][j]
            =inf;
                        }
                    }
                    
            get[s][1<<s]=a[s];
                    mt[s][
            1<<s]=0;
                    res
            =0;
                    tmp.v
            =s;
                    tmp.ti
            =0;
                    tmp.val
            =a[s];
                    tmp.st
            =1<<s;
                    q.push(tmp);
                    
            while(!q.empty())
                    {
                        tmp
            =q.front();
                        q.pop();
                        
            for(int i=0; i<n; i++)
                        {
                            
            if(i==tmp.v) continue;
                            
            if(mp[tmp.v][i]+tmp.ti<=t)
                            {
                                tmp1.val
            =tmp.val;
                                tmp1.st
            =tmp.st;
                                
            if(!((tmp1.st>>i)&1))
                                {
                                    tmp1.st
            =tmp1.st|(1<<i);
                                    tmp1.val
            +=a[i];
                                }
                                
            if(tmp1.val>get[i][tmp1.st]||(tmp1.val==get[i][tmp1.st]&&tmp.ti+mp[tmp.v][i]<mt[i][tmp1.st]))
                                {
                                    
            get[i][tmp1.st]=tmp1.val;
                                    mt[i][tmp1.st]
            =tmp.ti+mp[tmp.v][i];
                                    tmp1.ti
            =mt[i][tmp1.st];
                                    tmp1.v
            =i;
                                    q.push(tmp1);
                                }
                            }
                        }
                    }
                    
            for(int i=0; i<(1<<n); i++)
                        res
            =max(get[e][i],res);
                    printf(
            "%d\n",res);
                }
                
            return 0;
            }

            posted on 2012-07-30 21:51 jh818012 閱讀(95) 評論(0)  編輯 收藏 引用

            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導航

            統計

            常用鏈接

            留言簿

            文章檔案(85)

            搜索

            最新評論

            • 1.?re: poj1426
            • 我嚓,,輝哥,,居然搜到你的題解了
            • --season
            • 2.?re: poj3083
            • @王私江
              (8+i)&3 相當于是 取余3的意思 因為 3 的 二進制是 000011 和(8+i)
            • --游客
            • 3.?re: poj3414[未登錄]
            • @王私江
              0ms
            • --jh818012
            • 4.?re: poj3414
            • 200+行,跑了多少ms呢?我的130+行哦,你菜啦,哈哈。
            • --王私江
            • 5.?re: poj1426
            • 評論內容較長,點擊標題查看
            • --王私江
            热re99久久精品国产99热| 国内精品久久久久影院优 | 亚洲国产精品久久电影欧美| 亚洲国产精品久久久久婷婷软件| 久久亚洲精品无码AV红樱桃| 国产精品久久国产精麻豆99网站 | 国产精品久久久久久久久鸭| 国内精品久久久久久99蜜桃| 国产AⅤ精品一区二区三区久久 | 久久综合久久伊人| av色综合久久天堂av色综合在| 无码人妻精品一区二区三区久久| 91视频国产91久久久| 久久久久国产一级毛片高清板| 亚洲精品无码久久久久去q| 1000部精品久久久久久久久| 久久精品国产72国产精福利| 久久成人国产精品免费软件| 夜夜亚洲天天久久| 久久成人小视频| 亚洲一区二区三区日本久久九| 久久无码精品一区二区三区| 99久久婷婷国产综合亚洲| 青春久久| 国产69精品久久久久9999| 乱亲女H秽乱长久久久| 欧美性大战久久久久久| 国产精品99久久精品爆乳| 久久精品国产亚洲AV嫖农村妇女| 久久国产视屏| 国产99久久久国产精品~~牛| 久久大香香蕉国产| 精品多毛少妇人妻AV免费久久 | 久久久久亚洲AV无码去区首| 久久精品毛片免费观看| 亚洲AV成人无码久久精品老人| 国产精品久久久99| 国内精品久久久久久中文字幕 | 伊人久久综在合线亚洲2019| 精品久久久久久无码专区不卡| 久久热这里只有精品在线观看|