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个数组 方便理解   后来 就用了一个数组

反正 每道题自己能做到如何优化 就尽量优化它 要是遇到 数据太大嘛。。

 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 }
View Code

 

 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 }
View Code

 

 

today:

  同学聚会 才过了一年 大家就默契地定在了宾馆下的酒店 =-=

 

posted @ 2014-08-04 16:42  radical  阅读(150)  评论(0编辑  收藏  举报