[ 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 }