zoukankan      html  css  js  c++  java
  • Codeforces 283B Cow Program

    题意:给你a[2] - a[n], 一个初始x = 1,初始y = 0  ,执行下面步骤

    1) x +=a[x] ,y += a[x]

    2) x -= a[x] ,y += a[x]

    3)重复1-2步骤。只要中间x <=0 || x > n  就跳出。输出y的值

    问你a[1] 从 [1,n-1]分别的值为多少。

    解题思路:dfs 求 dp[i][0/1]  求以加法进入 i 和以减法进入 i 能得到的值。

    解题代码:

      1 // File Name: 283b.cpp
      2 // Author: darkdream
      3 // Created Time: 2015年03月12日 星期四 10时59分22秒
      4 
      5 #include<vector>
      6 #include<list>
      7 #include<map>
      8 #include<set>
      9 #include<deque>
     10 #include<stack>
     11 #include<bitset>
     12 #include<algorithm>
     13 #include<functional>
     14 #include<numeric>
     15 #include<utility>
     16 #include<sstream>
     17 #include<iostream>
     18 #include<iomanip>
     19 #include<cstdio>
     20 #include<cmath>
     21 #include<cstdlib>
     22 #include<cstring>
     23 #include<ctime>
     24 #define LL long long
     25 
     26 using namespace std;
     27 int a[200005];
     28 int vis[200005][2];
     29 LL dp[200005][2];
     30 int n ;
     31 void dfs(int k ,int t,int color)
     32 {
     33      if(t == 1)
     34      {
     35         dp[k][t] = a[k];
     36         if(k +a[k] > n)
     37         {
     38            return ;
     39         }
     40         if(vis[k + a[k]][t^1] != 0  )
     41         {
     42             if(vis[k+a[k]][t^1] == color)
     43                 dp[k][t] = -1;
     44             else{
     45                 if(dp[k+a[k]][t^1] == -1)
     46                     dp[k][t] = -1;
     47                 else dp[k][t] += dp[k+a[k]][t^1];
     48             }
     49             return ;
     50         }
     51         vis[k+a[k]][t^1] = color; 
     52         dfs(k+a[k],0,color);
     53         if(dp[k+a[k]][t^1] == -1)
     54             dp[k][t] = -1;
     55         else dp[k][t] += dp[k+a[k]][t^1];
     56      }else if(t == 0 ){
     57           dp[k][t] = a[k];
     58         if(k - a[k] <= 0)
     59         {
     60            return ;
     61         }
     62         if(k - a[k] ==  1)
     63         {
     64            dp[k][t] = -1;
     65            return ;
     66         }
     67         if(vis[k - a[k]][t^1] != 0  )
     68         {
     69             if(vis[k-a[k]][t^1] == color)
     70                 dp[k][t] = -1;
     71             else{
     72                 if(dp[k-a[k]][t^1] == -1)
     73                     dp[k][t] = -1;
     74                 else dp[k][t] += dp[k-a[k]][t^1];
     75             }
     76             return ;
     77         
     78         }
     79         vis[k-a[k]][t^1] = color; 
     80         dfs(k-a[k],1,color);
     81         if(dp[k-a[k]][t^1] == -1)
     82             dp[k][t] = -1;
     83         else dp[k][t] += dp[k-a[k]][t^1];
     84      }
     85 }
     86 int main(){
     87     scanf("%d",&n);
     88     for(int i = 2 ; i <= n;i ++)
     89     {
     90            scanf("%d",&a[i]);       
     91     }
     92     for(int i = 2;i <= n;i ++)
     93     {
     94          if(vis[i][0] == 0)
     95          {
     96             vis[i][0] = i; 
     97             dfs(i,0,i);
     98          }
     99          if(vis[i][1] == 0 )
    100          {
    101             vis[i][1] = i; 
    102             dfs(i,1,i);
    103          }
    104     }
    105     for(int i = 1;i < n;i ++)
    106     {
    107         if(1 + i > n)
    108         {
    109             printf("%d
    ",i);
    110             continue;
    111         }else{
    112             if(dp[1+i][0] != -1)
    113             printf("%I64d
    ",i+dp[1+i][0]);    
    114             else printf("-1
    ");
    115         }
    116     }
    117     
    118 return 0;
    119 }
    View Code
    没有梦想,何谈远方
  • 相关阅读:
    ireport字体无效处理
    java web调用打印机打印pdf文件
    Extjs中如何在一行textfield后面增加文字提示
    java 压缩文件
    filter加载springbean
    Elasticsearch问题记录
    dubbo管控台的安装记录及dubbo开发调试记录
    mysql索引整理
    fastdfs集群搭建3
    fastdfs集群搭建2
  • 原文地址:https://www.cnblogs.com/zyue/p/4333329.html
Copyright © 2011-2022 走看看