zoukankan      html  css  js  c++  java
  • Invoker(小DP)

    题意:http://acm.hdu.edu.cn/showproblem.php?pid=6739

    尽量让他们连起来。

    思路:

    直接dp,其中一个状态是以什么结尾。

      1 #define IOS ios_base::sync_with_stdio(0); cin.tie(0);
      2 #include <cstdio>//sprintf islower isupper
      3 #include <cstdlib>//malloc  exit strcat itoa system("cls")
      4 #include <iostream>//pair
      5 #include <fstream>//freopen("C:\Users\13606\Desktop\草稿.txt","r",stdin);
      6 #include <bitset>
      7 //#include <map>
      8 //#include<unordered_map>
      9 #include <vector>
     10 #include <stack>
     11 #include <set>
     12 #include <string.h>//strstr substr
     13 #include <string>
     14 #include <time.h>//srand(((unsigned)time(NULL))); Seed n=rand()%10 - 0~9;
     15 #include <cmath>
     16 #include <deque>
     17 #include <queue>//priority_queue<int, vector<int>, greater<int> > q;//less
     18 #include <vector>//emplace_back
     19 //#include <math.h>
     20 //#include <windows.h>//reverse(a,a+len);// ~ ! ~ ! floor
     21 #include <algorithm>//sort + unique : sz=unique(b+1,b+n+1)-(b+1);+nth_element(first, nth, last, compare)
     22 using namespace std;//next_permutation(a+1,a+1+n);//prev_permutation
     23 //******************
     24 int abss(int a);
     25 int lowbit(int n);
     26 int Del_bit_1(int n);
     27 int maxx(int a,int b);
     28 int minn(int a,int b);
     29 double fabss(double a);
     30 void swapp(int &a,int &b);
     31 clock_t __STRAT,__END;
     32 double __TOTALTIME;
     33 void _MS(){__STRAT=clock();}
     34 void _ME(){__END=clock();__TOTALTIME=(double)(__END-__STRAT)/CLOCKS_PER_SEC;cout<<"Time: "<<__TOTALTIME<<" s"<<endl;}
     35 //***********************
     36 #define rint register int
     37 #define fo(a,b,c) for(rint a=b;a<=c;++a)
     38 #define fr(a,b,c) for(rint a=b;a>=c;--a)
     39 #define mem(a,b) memset(a,b,sizeof(a))
     40 #define pr printf
     41 #define sc scanf
     42 #define ls rt<<1
     43 #define rs rt<<1|1
     44 typedef long long ll;
     45 const double E=2.718281828;
     46 const double PI=acos(-1.0);
     47 //const ll INF=(1LL<<60);
     48 const int inf=(1<<30);
     49 const double ESP=1e-9;
     50 const int mod=(int)1e9+7;
     51 const int N=(int)1e5+10;
     52 
     53 int dp[N][50];
     54 char s[N];
     55 int tot;
     56 int ID[400];
     57 int map[50];
     58 int id(int x)
     59 {
     60     return ID[x];
     61 }
     62 struct node
     63 {
     64     int a,b,c;
     65 }p[10];
     66 void PR(int _[],int n)
     67 {
     68     for(int i=1;i<=n;++i)
     69         pr("%d ",_[i]);
     70     pr("
    ");
     71 }
     72 int main()
     73 {
     74     tot=0;
     75     for(int i=1;i<=350;++i)
     76     {
     77         int temp=i;
     78         bool f=1;
     79         while(temp>0)
     80         {
     81             if(temp%10!=1&&temp%10!=2&&temp%10!=3)
     82                 f=0;
     83             temp/=10;
     84         }
     85         if(f)map[++tot]=i;
     86     }
     87     for(int i=1;i<=45;++i)
     88         ID[map[i]]=i;
     89     p[1]={1,2,3};
     90     p[2]={1,3,2};
     91     p[3]={2,1,3};
     92     p[4]={2,3,1};
     93     p[5]={3,1,2};
     94     p[6]={3,2,1};
     95     int v[200];
     96     v['Y']=111;
     97     v['V']=112;
     98     v['G']=113;
     99     v['C']=222;
    100     v['X']=122;
    101     v['Z']=223;
    102     v['T']=333;
    103     v['F']=133;
    104     v['D']=233;
    105     v['B']=123;
    106     while(~sc("%s",s+1))
    107     {
    108         int l=strlen(s+1);
    109         for(int i=1;i<=l;++i)
    110             for(int j=1;j<=45;++j)
    111                 dp[i][j]=inf;
    112         for(int i=1;i<=6;++i)
    113         {
    114             int temp=v[s[1]];
    115             int cnt=3;
    116             int mp[5];
    117             while(temp>0)
    118             {
    119                 mp[cnt]=temp%10;
    120                 temp/=10;
    121                 cnt--;
    122             }
    123             int x=mp[p[i].b]*10+mp[p[i].c];
    124             dp[1][id(mp[p[i].a]*100+mp[p[i].b]*10+mp[p[i].c])]=min(3,dp[1][id(mp[p[i].a]*100+mp[p[i].b]*10+mp[p[i].c])]);
    125             dp[1][id(x)]=min(dp[1][id(x)],3);
    126             x=mp[p[i].c];
    127             dp[1][id(x)]=min(dp[1][id(x)],3);
    128         }
    129         //PR(dp[1],37);
    130         int ans=0;
    131         for(int i=2;i<=l+1;++i)
    132         {
    133             int min_=inf;
    134             for(int j=1;j<=45;++j)
    135                 min_=min(min_,dp[i-1][j]);
    136             ans=min_;
    137             if(i==l+1)break;
    138 
    139             int temp=v[s[i]];
    140             int cnt=3;
    141             int mp[5];
    142             while(temp>0)
    143             {
    144                 mp[cnt]=temp%10;
    145                 temp/=10;
    146                 cnt--;
    147             }
    148             for(int j=1;j<=6;++j)
    149             {
    150                 int x=mp[p[j].a],y=mp[p[j].b],z=mp[p[j].c];
    151             //    cout<<x<<' '<<y<<' '<<z<<endl;
    152                 dp[i][id(x*100+y*10+z)]=min(dp[i][id(x*100+y*10+z)],min(min(dp[i-1][id(x)]+2,min(min_+3,dp[i-1][id(x*10+y)]+1)),dp[i-1][id(x*100+y*10+z)]));
    153                 dp[i][id(y*10+z)]=min(dp[i][id(y*10+z)],min(min(dp[i-1][id(x)]+2,min(min_+3,dp[i-1][id(x*10+y)]+1)),dp[i-1][id(x*100+y*10+z)]));
    154                 dp[i][id(z)]=min(dp[i][id(z)],min(min(dp[i-1][id(x)]+2,min(min_+3,dp[i-1][id(x*10+y)]+1)),dp[i-1][id(x*100+y*10+z)]));
    155             }
    156         //    PR(dp[i],37);
    157         }
    158         pr("%d
    ",ans+l);
    159     }
    160     return 0;
    161 }
    162 
    163 /**************************************************************************************/
    164 
    165 int maxx(int a,int b)
    166 {
    167     return a>b?a:b;
    168 }
    169 
    170 void swapp(int &a,int &b)
    171 {
    172     a^=b^=a^=b;
    173 }
    174 
    175 int lowbit(int n)
    176 {
    177     return n&(-n);
    178 }
    179 
    180 int Del_bit_1(int n)
    181 {
    182     return n&(n-1);
    183 }
    184 
    185 int abss(int a)
    186 {
    187     return a>0?a:-a;
    188 }
    189 
    190 double fabss(double a)
    191 {
    192     return a>0?a:-a;
    193 }
    194 
    195 int minn(int a,int b)
    196 {
    197     return a<b?a:b;
    198 }
  • 相关阅读:
    一起谈.NET技术,ASP.NET应用下基于SessionState的“状态编程框架”解决方案 狼人:
    一起谈.NET技术,谈谈ASP.NET皮肤机制的实现 狼人:
    一起谈.NET技术,asp.net控件开发基础(9) 狼人:
    一起谈.NET技术,asp.net控件开发基础(11) 狼人:
    一起谈.NET技术,ASP.NET MVC 3 Beta初体验之实用的WebMail 狼人:
    一起谈.NET技术,关于Silverlight战略转移新闻,我的思考 狼人:
    一起谈.NET技术,ASP.NET MVC 3 Beta初体验之超酷的Chart:3D效果 狼人:
    一起谈.NET技术,asp.net控件开发基础(10) 狼人:
    一起谈.NET技术,asp.net控件开发基础(19) 狼人:
    一起谈.NET技术,asp.net控件开发基础(8) 狼人:
  • 原文地址:https://www.cnblogs.com/--HPY-7m/p/11605047.html
Copyright © 2011-2022 走看看