• 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

  • 相关阅读:
    python+requests——定制请求头——cookie
    python+requests——高级用法——上传文件
    彻底搞定C指针例题
    static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较
    单链表的基本操作
    new int[10]()
    用人单位给计算机系学生的一封信(超长评论版)
    指向二维数组的指针
    《windows程序设计》第一章学习心得
    VS2010编译Lua程序
  • 原文地址:https://www.cnblogs.com/shihuajie/p/2652668.html
Copyright © 2020-2023  润新知