• <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>
            隨筆-65  評(píng)論-6  文章-0  trackbacks-0
            /*46MS*/
              1 /*
              2 Author:    Leo.W
              3 Descriptipn:  最短路問(wèn)題+01背包,好題啊。
              4 How to Do:  將路程即耗油量視作背包容積,取得的電量視作價(jià)值,那么就是給定價(jià)值,求滿足這一價(jià)值的最小容積。
              5             先求出自base點(diǎn)到其他各點(diǎn)的最短距離,再以此為基礎(chǔ)做0-1背包。
              6   */
              7 
              8 #include <cstdio>
              9 #include <string.h>
             10 #define MAXSIZE 101
             11 #define IMAX 10050
             12 char ch;
             13 int n,m;
             14 int dis[MAXSIZE][MAXSIZE];
             15 int cost[MAXSIZE];
             16 int value[MAXSIZE];
             17 int visited[MAXSIZE];
             18 int dp[IMAX];
             19 
             20 void dijiastra(){
             21     int i,j,pos;
             22     memset(visited,1,sizeof(visited));
             23     for(i=1;i<=n;i++)
             24         cost[i]=dis[0][i];
             25     for(i=1;i<=n;i++){
             26         int MIN=IMAX;
             27         for(j=1;j<=n;j++)
             28             if(visited[j]&&cost[j]<MIN){
             29                 MIN=cost[j];
             30                 pos=j;
             31             }
             32         if(MIN==IMAX)    break;
             33         visited[pos]=0;
             34         for(j=1;j<=n;j++){
             35             if(visited[j]&&cost[j]>cost[pos]+dis[pos][j])
             36                 cost[j]=cost[pos]+dis[pos][j];
             37         }
             38     }
             39 }
             40 inline void scan(int &x){
             41     while(ch=getchar(),ch<'0'||ch>'9');x=ch-'0';
             42     while(ch=getchar(),ch>='0'&&ch<='9')x=10*x+ch-'0';
             43 }
             44 inline void init(){
             45     for(int i=0;i<=n;i++){
             46         for(int j=0;j<=n;j++)
             47             if(i==j)
             48                 dis[i][j]=0;
             49             else
             50                 dis[i][j]=IMAX;
             51     }
             52     memset(dp,0,sizeof(dp));
             53 }
             54 int main(){
             55     #ifdef ONLINE_JUDGE
             56     #else
             57         freopen("in.txt","r",stdin);
             58     #endif
             59     int t;
             60     scan(t);
             61     while (t--){
             62         scan(n);
             63         scan(m);
             64         init();
             65         int i,j;
             66         for(i=0;i<m;i++){
             67             int a,b,c;
             68             scan(a);
             69             scan(b);
             70             scan(c);
             71             if(dis[a][b]>c)
             72                 dis[a][b]=dis[b][a]=c;
             73         }
             74         for(i=1;i<=n;i++)
             75             scan(value[i]);
             76         dijiastra();
             77         int v=0,c=0,flag=0;
             78         for(i=1;i<=n;i++){
             79             v+=value[i];
             80             c+=cost[i];
             81             if(cost[i]==IMAX){
             82                 flag=1;
             83                 break;
             84             }        
             85         }
             86         if(flag){
             87             puts("impossible");
             88             continue;
             89         }
             90         for(i=1;i<=n;i++)
             91             for(j=c;j>=cost[i];j--){
             92                 if(dp[j-cost[i]]+value[i]>dp[j])
             93                     dp[j]=dp[j-cost[i]]+value[i];
             94             }
             95         int target=v/2;
             96         for(j=1;j<=c;j++)
             97             if(dp[j]>target)
             98                 break;
             99         printf("%d\n",j);
            100     }
            101     return 0;
            102 }
            103 
            posted on 2012-03-23 17:16 Leo.W 閱讀(194) 評(píng)論(0)  編輯 收藏 引用

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


            久久亚洲精品成人AV| 97久久超碰国产精品2021| 国产—久久香蕉国产线看观看| 久久九九有精品国产23百花影院| 精品永久久福利一区二区| 91精品久久久久久无码| 热久久最新网站获取| 国产成人精品久久二区二区| 欧美久久久久久精选9999| 色综合久久久久综合体桃花网| 51久久夜色精品国产| 久久久久久精品成人免费图片| 国产精品久久久久…| 久久国产精品波多野结衣AV| 久久夜色精品国产www| 模特私拍国产精品久久| 伊人久久精品无码二区麻豆| 中文字幕乱码人妻无码久久| 久久久久亚洲精品天堂| 久久99久久无码毛片一区二区| 国内精品久久久久久久久| 亚洲精品国精品久久99热一| 国产高潮国产高潮久久久91 | 久久综合狠狠综合久久综合88| 99久久国产亚洲综合精品| 国产麻豆精品久久一二三| 欧美激情精品久久久久久久| 一本色道久久HEZYO无码| 国产高潮国产高潮久久久91 | 97久久国产亚洲精品超碰热| 精品无码久久久久久久久久| 亚洲精品午夜国产va久久| 久久亚洲中文字幕精品有坂深雪 | 久久99精品久久久久久动态图| 乱亲女H秽乱长久久久| 久久噜噜久久久精品66| 国产精品一区二区久久| 无码国内精品久久综合88| 精品久久久久久无码人妻蜜桃| 亚洲精品无码久久久影院相关影片 | 久久婷婷五月综合97色直播|