hdu2571 命运
每组测试数据的第一行是两个整数n,m,分别表示行数和列数(1<=n<=20,10<=m<=1000);
悔不该看错题,WA了无数遍
把m,n的范围看反了。。。。狂WA= =
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<algorithm> using namespace std; __int64 m,n; __int64 a[22][1010]; __int64 d[22][1010]; int main() { __int64 total; scanf("%I64d",&total); while(total--) { scanf("%I64d %I64d",&m,&n); __int64 i,j; for(i=0;i<m;i++) { for(j=0;j<n;j++) { scanf("%I64d",&a[i][j]); } } __int64 temp; __int64 k; d[0][0]=a[0][0]; for(i=1;i<m;i++) { d[i][0]=d[i-1][0]+a[i][0]; } for(i=1;i<n;i++) { temp=d[0][i-1]; for(j=0;j<i-1;j++) { if((i+1)%(j+1)==0) { if(temp<d[0][j]) { temp=d[0][j]; } } } d[0][i]=temp+a[0][i]; } for(i=1;i<m;i++) { for(j=1;j<n;j++) { temp=d[i-1][j]; if(temp<d[i][j-1]) { temp=d[i][j-1]; } for(k=0;k<j-1;k++) { if((j+1)%(k+1)==0) { if(d[i][k]>temp) { temp=d[k][j]; } } } d[i][j]=temp+a[i][j]; } } printf("%I64d\n",d[m-1][n-1]); } return 0; }