HOJ 1058(acm.hit.edu.cn)
简单的DP,以前做过的,直接拿来修改一下,交了
源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | /* ID: tgh7281 LANG: C++ TASK: numtri */ #include <iostream> #include <fstream> using namespace std; int main() { int n,i,j,k,m,size; int *num,*max; ifstream fin("numtri.in"); ofstream fout("numtri.out"); fin>>n; size=n*(n+1)/2; num=(int*)malloc(size*sizeof(int)); max=(int*)malloc(size*sizeof(int)); for (i=0;i<size;i++) fin>>num[i]; max[0]=num[0]; for (i=1;i<n;i++) { for (j=0;j<=i;j++) { k=i*(i+1)/2+j; if (j==0) max[k]=max[i*(i-1)/2]+num[k]; else if (j==i) max[k]=max[i*(i+1)/2-1]+num[k]; else { max[k]=max[(i-1)*i/2+j]>max[(i-1)*i/2+j-1]?max[(i-1)*i/2+j]:max[(i-1)*i/2+j-1]; max[k] += num[k]; } } } m=0; for (i=(n-1)*n/2;i<n*(n+1)/2;i++) if (m<max[i]) m=max[i]; fout<<m<<endl; free(max); free(num); fin.close(); fout.close(); return 0; } |











