hdoj2571【DP基础】
来源:互联网 发布:checking php support 编辑:程序博客网 时间:2024/06/07 01:21
题意:中文题/
思路:DP的思想要理解,就是从上一个最优状态使被传到的状态也是最优状态。因为很久没有打DP,所以连简单地这样的都wa了6次;(QAQ废话不多说)。
题目要求是从(x,y)到(x,y+1)/(x+1,y)/(x,y*k),那么很明显dp[i][j]=max(前面的状态+dp[i][j]),但是你以为就这样而已么?
1.边界问题,在两个边界上,对于(列)j=1那一列,dp[i][j]只=dp[i][j]+dp[i-1][j];
2.初始化DP数组问题,这个的话要看具体实现了,如果你使用了不该用的状态就要有那个状态的定义。每一个状态的转变都要有定义,在条件上和限制上最优的定义。
code:
#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>using namespace std;int dp[30][1010];int n,m;void debug(){ for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { printf("%d ",dp[i][j]); } puts(""); }}int main(){ int T; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf("%d",&dp[i][j]); } } for(int i=2;i<=n;i++) { dp[i][1]+=dp[i-1][1]; } int temp; for(int i=1;i<=n;i++) { for(int j=2;j<=m;j++) { if(i==1) temp=dp[i][j-1]; else if(j==1) temp=dp[i-1][j]; else temp=max(dp[i-1][j],dp[i][j-1]); for(int k=1;k<j;k++) { if(!(j%k)) temp=max(temp,dp[i][k]); } dp[i][j]+=temp; } } //debug(); printf("%d\n",dp[n][m]); } return 0;}
2 0
- hdoj2571【DP基础】
- HDOJ2571 命运【dp】
- 【hdoj2571】命运(dp)
- HDOJ2571 DP入门题(DP+DFS)
- dp基础
- 基础DP
- 基础DP
- DP基础
- 基础DP
- 基础DP
- 基础DP
- 基础dp
- 基础dp
- DP·基础DP
- [DP]0817-08基础DP
- POJ1949 DP基础题
- 数位dp基础题目
- HDU 1176 基础DP
- 网络第一课
- sdut第八届校赛--小厚的三角形
- 数据结构复习——二叉树的表示及遍历
- 《剑指offer》-最小的K个数
- 寻址方式
- hdoj2571【DP基础】
- Unity让调试更加简单(一)
- [MySQL学习笔记]case when then else end用法
- 练习1-22 编写一个程序,把较长的输入行“折”成短一些的两行或多行,折行的位置在输入行的第n列之前的最后一个空格之后
- android studio构建项目一直卡在gradle build running界面
- char字符与wchar_t字符的相互转换,以及wchar_t字符串的常用用法
- 古典小说网 首创卡拉OK式阅读新体验
- SAP本地化-银企直连
- solver.prototxt参数说明(三)