• hdu 3001


    三进制状压DP,预处理就可以了,不过数据好大好难调。。

    没注意重边WA了一版。。不会生出图的数据,就干脆建了个完全图

     1 //#include<bits/stdc++.h>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<queue>
     6 #include<iostream>
     7 #define inc(i,l,r) for(int i=l;i<=r;i++)
     8 #define dec(i,l,r) for(int i=l;i>=r;i--)
     9 #define link(x) for(edge *j=h[x];j;j=j->next)
    10 #define mem(a) memset(a,0,sizeof(a))
    11 #define inf 1e9
    12 #define ll long long
    13 #define succ(x) (1<<x)
    14 #define NM 12
    15 using namespace std;
    16 int read(){
    17     int x=0,f=1;char ch=getchar();
    18     while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
    19     while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
    20     return x*f;
    21 }
    22 int mul[20],_x,_y,n,m,d[60000][NM],a[NM][NM],v[NM],ans;
    23 int main(){
    24     mul[0]=1;
    25     inc(i,1,11)mul[i]=mul[i-1]*3;
    26     while(scanf("%d%d",&n,&m)!=EOF){
    27         mem(a);mem(d);
    28         inc(i,1,n)
    29         inc(j,1,n)a[i][j]=inf;
    30         inc(i,1,m){
    31             _x=read();_y=read();
    32             a[_y][_x]=a[_x][_y]=min(a[_x][_y],read());
    33         }
    34         m=mul[n]-1;
    35         inc(i,1,n)
    36         inc(t,1,m)d[t][i]=inf;
    37         inc(i,1,n)d[mul[i-1]][i]=0;
    38         inc(t,1,m)
    39         inc(i,1,n)
    40         if(d[t][i]<inf){
    41             mem(v);
    42             inc(j,1,n)v[j]=t%mul[j]/mul[j-1];
    43             inc(j,1,n)
    44             if(v[j]!=2&&a[i][j]<inf)
    45             d[t+mul[j-1]][j]=min(d[t+mul[j-1]][j],d[t][i]+a[i][j]);
    46         }
    47 //        inc(t,1,m){
    48 //            inc(i,1,n)printf("%d ",d[t][i]);
    49 //            printf("
    ");
    50 //        }
    51         ans=inf;
    52         inc(t,1,m){
    53         _x=1;
    54         inc(i,1,n)
    55         if(t%mul[i]/mul[i-1]==0)_x=0;
    56         if(_x)
    57         inc(i,1,n)
    58         ans=min(ans,d[t][i]);
    59         }
    60         if(ans==inf)printf("-1
    ");else printf("%d
    ",ans);
    61     }
    62     return 0;
    63 }
    View Code
  • 相关阅读:
    状态模式作业
    建造者模式作业
    关于 IIS 上的 Speech 设置
    装饰模式作业
    《软件架构与设计模式》关于 抽象工厂模式 的一个小例子
    谈一谈为什么我要创建个人博客
    C#网站发布在IIS10上,Access数据库读取为空白的解决方案
    广义表 Head Tail
    c# asp.net4.0尚未在web服务器上注册
    装饰者模式(例子)
  • 原文地址:https://www.cnblogs.com/onlyRP/p/5064566.html
Copyright © 2020-2023  润新知