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 }

 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:

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

hdu--2571--dp

时间: 2024-08-27 00:02:48

hdu--2571--dp的相关文章

hdu 2571 dp入门题

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2571 常规dp,刚好让我这菜鸟来找找 找状态转移方程的感觉.. 定义dp[i][j]  表示的是第i行j列所拥有的最大的幸运值. dp[i][j] 由三种情况转移而来:1.从上面一个坐标转移而来,即dp[i-1][j] .2.由左边转移过来,即dp[i][j-1].3.由他同一行中的 j 的因数列转移过来的(但是要除了j自己),即dp[i][ j 的因数列] 找出这三种情况中最大的就可以了,dp[i

HDU 2571 命运 (DP)

命运 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 2571 Description 穿过幽谷意味着离大魔王lemon已经无限接近了! 可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个机关.要知道,不论何人,若在迷宫中被困1小时以上,则必死无疑! 可怜的yifenfei为了去

HDU 2571 命运 (动规)

命运 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9334    Accepted Submission(s): 3289 Problem Description 穿过幽谷意味着离大魔王lemon已经无限接近了! 可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个机关.要知

hdu 2571

命运 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 9205    Accepted Submission(s): 3250 Problem Description 穿过幽谷意味着离大魔王lemon已经无限接近了!可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个机关.要知道,

hdu 2571 命运(递推,请小心)

题目 //不能广搜,会超内存//可以用dp思想模拟//map 后来保存的是 保存由前面推来的最大的幸运总值的点//下标从1开始,不然倍数会有问题 //AC 代码: AC代码 //不能广搜,会超内存 //可以用dp思想模拟 //map 后来保存的是 保存由前面推来的最大的幸运总值的点 //下标从1开始,不然倍数会有问题 //又错了那么多次... //重写... //求过!!! #include<stdio.h> #include<string.h> #include<algor

HDU 4832(DP+计数问题)

HDU 4832 Chess 思路:把行列的情况分别dp求出来,然后枚举行用几行,竖用几行,然后相乘累加起来就是答案 代码: #include <stdio.h> #include <string.h> #include <iostream> using namespace std; typedef long long ll; const ll MOD = 9999991; const int N = 1005; int t, n, m, k, x, y; ll dp1

hdu 3944 dp?

DP? Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 128000/128000 K (Java/Others)Total Submission(s): 1804    Accepted Submission(s): 595 Problem Description Figure 1 shows the Yang Hui Triangle. We number the row from top to bottom 0,1,2,-a

hdu 5389 dp类似背包

http://acm.hdu.edu.cn/showproblem.php?pid=5389 Problem Description Zero Escape, is a visual novel adventure video game directed by Kotaro Uchikoshi (you may hear about ever17?) and developed by Chunsoft. Stilwell is enjoying the first chapter of this

hdu 1025 dp 最长上升子序列

1 //Accepted 4372 KB 140 ms 2 //dp 最长上升子序列 nlogn 3 #include <cstdio> 4 #include <cstring> 5 #include <iostream> 6 using namespace std; 7 const int imax_n = 500005; 8 int dp[imax_n]; 9 int d[imax_n]; 10 int a[imax_n]; 11 int n; 12 int len

HDU 5928 DP 凸包graham

给出点集,和不大于L长的绳子,问能包裹住的最多点数. 考虑每个点都作为左下角的起点跑一遍极角序求凸包,求的过程中用DP记录当前以j为当前末端为结束的的最小长度,其中一维作为背包的是凸包内侧点的数量.也就是 dp[j][k]代表当前链末端为j,其内部点包括边界数量为k的最小长度.这样最后得到的一定是最优的凸包. 然后就是要注意要dp[j][k]的值不能超过L,每跑一次凸包,求个最大的点数量就好了. 和DP结合的计算几何题,主要考虑DP怎么搞 /** @Date : 2017-09-27 17:27