zoukankan      html  css  js  c++  java
  • hdu3339 In Action

     1 #include<stdio.h>
     2 #include<string.h>
     3 #define Max 0x3f3f3f3f
     4 int n,m,totalEle,miCost;
     5 bool vis[101];
     6 int map[101][101],dist[101];
     7 int d[10001],val[101];
     8 void init()//初始化读入数据 
     9 {
    10     int i,j,a,b,w;
    11     scanf("%d%d",&n,&m);
    12     for(i=0;i<=n;++i)
    13         for(j=0;j<=n;++j)
    14             map[i][j]=map[j][i]=Max;
    15     for(i=0;i<m;++i){
    16         scanf("%d%d%d",&a,&b,&w);
    17         if(map[a][b]>w)
    18             map[a][b]=map[b][a]=w;
    19     }
    20     for(totalEle=0,i=1;i<=n;++i){
    21         scanf("%d",&val[i]);
    22         totalEle+=val[i];
    23     }
    24     memset(vis,0,sizeof(vis));
    25     memset(d,0x3f,sizeof(d));//因为要求最小值,所以要赋很大的值 
    26     for(i=0;i<=n;++i)
    27         dist[i]=map[0][i];
    28 }
    29 void dijkstra()
    30 {
    31     int i,k,t,min;
    32     for(vis[0]=k=1;k<=n;++k){//n+1个点,求0到其它点的最短路径 
    33         for(min=Max,i=0;i<=n;++i){
    34             if(!vis[i]&&min>dist[i]){
    35                 min=dist[i];
    36                 t=i;
    37             }
    38         }
    39         vis[t]=1;
    40         for(i=0;i<=n;++i){
    41             if(!vis[i]&&dist[i]>min+map[t][i]){
    42                 dist[i]=min+map[t][i];
    43             }
    44         }
    45     }
    46 }
    47 int dp()
    48 {
    49     int i,j;
    50     for(miCost=Max,d[0]=0,i=1;i<=n;++i){//滚动数组也挺好用的 
    51         for(j=totalEle;j>=val[i];--j){//以总电量为背包的0-1背包,求消耗最少的油 
    52             d[j]<?=d[j-val[i]]+dist[i];//取较小值 
    53             if(j>totalEle/2&&miCost>d[j])//寻找符合条件的最小耗油量 
    54                 miCost=d[j];
    55         }
    56     }
    57 }
    58 int main()
    59 {
    60     int T;
    61     scanf("%d",&T);
    62     while(T--){
    63         init();
    64         dijkstra();
    65         dp();
    66         if(miCost<Max) printf("%d\n",miCost);
    67         else puts("impossible");
    68     }
    69     return 0;
    70 }

    //最短路径+dp

  • 相关阅读:
    ID的插入
    开发语言的选择
    象数据库一样连接EXCEL
    前端,你真的了解JavaScript吗?
    开源软件与自由软件
    在codeigniter中使用Cache_Lite来缓存
    使用Codeigniter的SMTP类发Email
    JavaScript变量和数据类型
    JavaScript的隐式声明和变量声明提升的总结
    ASCII和UNICODE编码以及UTF8,你懂的?
  • 原文地址:https://www.cnblogs.com/shihuajie/p/2652668.html
Copyright © 2011-2022 走看看