URAL1495. One-two, One-two 2(dp)

1495

牵扯一点数位 保存数的时候我是按2进制保存的 把1当作0算 把2当作1算 滚动数组

dp[i][j][(g*10+j)%n] = min(dp[i][j][(g*10+j)%n],dp[i-1][1][g]*2+j-1,dp[i-1][2][g]*2+j-1) j取1,2   *2+j-1是因为我按二进制算的

时限给出的2S就是给我这种毫无优化又笨又戳的代码的 跑了1.39s

0xfffffff的范围 是2Y多 还是少用好了  太容易超了 

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<stdlib.h>
 6 #include<vector>
 7 using namespace std;
 8 #define N 1000010
 9 #define INF 1e9
10 #define LL long long
11 LL dp[2][3][N];
12 int o[33];
13 int main()
14 {
15     int i,j,n,g,y;
16     LL x = INF;
17     cin>>n;
18     if(n==1||n==2)
19     {
20         cout<<n<<endl;
21         return 0;
22     }
23     int flag = 0;
24     for(i = 1 ; i <= 2 ; i++)
25         for(j = 0 ; j < n ; j++)
26         dp[0][i][j] = dp[1][i][j] = INF;
27     for(i = 1; i <= 2 ; i++)
28     dp[1][i][i%n] = i-1;
29     for(i = 2; i <= 30 ; i++)
30     {
31         for(j = 1; j <= 2 ; j++)
32         {
33             for(g = 0 ; g < n ; g++)
34             {
35                 if(dp[(i-1)%2][1][g]!=INF)
36                 dp[i%2][j][(g*10+j)%n] = min(dp[i%2][j][(g*10+j)%n],dp[(i-1)%2][1][g]*2+j-1);
37                 if(dp[(i-1)%2][2][g]!=INF)
38                 dp[i%2][j][(g*10+j)%n] = min(dp[i%2][j][(g*10+j)%n],dp[(i-1)%2][2][g]*2+j-1);
39                 if((g*10+j)%n==0&&dp[i%2][j][0]!=INF)
40                 {
41                     flag = 1;
42                     if(x>dp[i%2][j][0])
43                     {
44                         x = min(x,dp[i%2][j][0]);
45                         y = i;
46                     }
47                 }
48             }
49         }
50         if(flag) break;
51     }
52     if(!flag)
53     puts("Impossible");
54     else
55     {
56         g = 0;
57         while(x)
58         {
59             o[++g] = x%2+1;
60             x/=2;
61         }
62         for(i = 1 ; i <= y-g ; i++)
63         cout<<"1";
64         for(i = g;i >= 1; i--)
65         cout<<o[i];
66     }
67     return 0;
68 }
View Code

 

 

posted @ 2014-02-10 17:46  _雨  阅读(341)  评论(0编辑  收藏  举报