hdu--2571--dp
Ah...day by day...
今天 看到公公建立个新生 程序群 想起了去年夏天 自己刚刚得知是计科的时候 的 一片茫然。。
记得 去看了视频学了下C 发现太难了啊 又去学了下java 发现还是java的入门比C简单啊。。。
反正 现在快忘光了 =-=
我只想和学弟学妹们说: 慢慢来 不用急着问 哪本书适合入门 It's a long long road
-----------------------
还是喜欢讲点碎碎念 发牢骚=-=、
这题 要是让我很久前做肯定以为是dfs的...
这题 其实和数塔什么的都有一点共同之处的。。
dp[ i ][ j ] += max( dp[ i-1 ] [ j ] , dp[ i ] [ j-1 ] , dp [ i , j*k ] )...至于边界处理 这边就不注明了 反正这个状态方程就是本题的核心
一开始 想先A掉 开了2个数组 方便理解 后来 就用了一个数组
反正 每道题自己能做到如何优化 就尽量优化它 要是遇到 数据太大嘛。。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 const int inf = -0x3f3f3f3f; 6 int maze[25][1010]; 7 int dp[25][1010]; 8 9 int main() 10 { 11 int t , n , m; 12 while( cin >> t ) 13 { 14 while( t-- ) 15 { 16 cin >> n >> m; 17 for( int i = 1 ; i<=n ; i++ ) 18 { 19 for( int j = 1 ; j<=m ; j++ ) 20 { 21 cin >> maze[i][j]; 22 } 23 } 24 for( int i = 0 ; i<=n ; i++ ) 25 dp[i][0] = inf; 26 for( int j = 0 ; j<=m ; j++ ) 27 dp[0][j] = inf; 28 dp[0][1] = dp[1][0] = 0; 29 for( int i = 1 ; i<=n ; i++ ) 30 { 31 for( int j = 1 ; j<=m ; j++ ) 32 { 33 dp[i][j] = max( dp[i-1][j] , dp[i][j-1] ); 34 for( int k = 1 ; k<j ; k++ ) 35 { 36 if( j%k==0 ) 37 dp[i][j] = max( dp[i][j] , dp[i][k] ); 38 } 39 dp[i][j] += maze[i][j]; 40 } 41 } 42 cout << dp[n][m] << endl; 43 } 44 } 45 return 0; 46 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 const int inf = -0x3f3f3f3f; 6 int dp[25][1010]; 7 8 int main() 9 { 10 int t , n , m , temp; 11 while( cin >> t ) 12 { 13 while( t-- ) 14 { 15 cin >> n >> m; 16 for( int i = 1 ; i<=n ; i++ ) 17 { 18 for( int j = 1 ; j<=m ; j++ ) 19 { 20 cin >> dp[i][j]; 21 } 22 } 23 for( int i = 1 ; i<=n ; i++ ) 24 { 25 for( int j = 1 ; j<=m ; j++ ) 26 { 27 temp = inf; 28 if( i==1 && j==1 ) 29 continue; 30 else if( i>=2 && j==1 ) 31 temp = max( temp , dp[i-1][j] ); 32 else if( i==1 && j>=2 ) 33 temp = max( temp , dp[i][j-1] ); 34 else 35 temp = max( dp[i-1][j] , dp[i][j-1] ); 36 for( int k = 1 ; k<j ; k++ ) 37 { 38 if( j%k==0 ) 39 temp = max( temp , dp[i][k] ); 40 } 41 dp[i][j] += temp; 42 } 43 } 44 cout << dp[n][m] << endl; 45 } 46 } 47 return 0; 48 }
today:
同学聚会 才过了一年 大家就默契地定在了宾馆下的酒店 =-=
just follow your heart