[ CodeVS冲杯之路 ] P1220

  不充钱,你怎么AC?

  题目:http://codevs.cn/problem/1220/

 

  一个标准的DAG上的DP,设 f[i][j] 为在第 i 行第 j 最大分数

  

  因为这个状态是无后效性的,所以可以直接在读入的时候用原数组转移

  目标状态是 max(f[n][i] )  i=1~n

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 #define N 101
 8 using namespace std;
 9 
10 int a[N][N],n,ans;
11 int main()
12 {
13     int i,j;
14     scanf("%d%d",&n,&a[1][1]);
15     ans=a[1][1];
16     for (i=2;i<=n;i++)
17         for (j=1;j<=i;j++)
18             {
19                 scanf("%d",&a[i][j]);
20                 a[i][j]+=max(a[i-1][j],a[i-1][j-1]);
21                 if (i==n) ans=max(a[i][j],ans);
22             }
23     printf("%d\n",ans);
24     return 0;
25 }

 

posted @ 2016-09-18 15:27  Hadilo  阅读(132)  评论(0编辑  收藏  举报