zoukankan      html  css  js  c++  java
  • NOIP1996 第三题

    <问题分析>

    每个状态表示到达这个状态所挖地雷的最大数,状态转移方程 s[i]=max{s[j]}+w[i] if(v[i][j]=1)

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int i,j,k,n,w[21],s[21],y[21];
     6     bool v[21][21];
     7     scanf("%d",&n);
     8     for(i=1;i<=n;i++)
     9     {
    10        s[i]=0;
    11        scanf("%d",&w[i]);
    12     }
    13     for(i=1;i<=n-1;i++)
    14     {
    15        for(j=i+1;j<=n;j++)
    16        {
    17           scanf("%d",&k);
    18           if(k==1)
    19             v[i][j]=true;
    20           else
    21             v[i][j]=false;
    22        }
    23     }
    24     for(i=2;i<=n;i++)
    25     {
    26        for(j=1;j<i;j++)
    27          if(v[j][i]&&s[j]+w[j]>s[i])
    28          {
    29             s[i]=s[j]+w[j];y[i]=j;
    30          }
    31     }
    32     y[1]=0;
    33     s[n]+=w[n];
    34     i=n;j=0;
    35     while(i>0)
    36     {
    37        w[j++]=i;
    38        i=y[i];
    39     }
    40     for(i=j-1;i>0;i--)
    41     {
    42        printf("%d->",w[i]);
    43     }
    44     printf("%d
    max=%d
    ",w[0],s[n]);
    45     while(true);
    46     return 0;
    47 }
  • 相关阅读:
    java泛型
    java集合
    java面向对象
    java常用类
    二分查找
    递归
    选择排序+冒泡排序
    threejs入门简单例子
    css表格合并边框以及单元格宽度计算方式
    Spring Boot 有哪些优点?
  • 原文地址:https://www.cnblogs.com/simplesslife/p/DiggingMines.html
Copyright © 2011-2022 走看看