BestCoder Round #63 (div.2)1003 matrix
2015-11-21 21:02
344 查看
好兴奋水了一发DP ~
可以根据位置判断当前步数的奇偶性,然后奇数的dp值储存前一个的最小值,偶数的dp值储存现在的整个式子的总和~感觉之前的DP没白练
虽然也有挺多人A了 但是好歹这次进前200了 rate终于能涨点了 倒是挺后悔为啥没早点做 还有10分钟 应该是挤不出200的
贴出来光荣的代码 其实有一个地方可以优化一下的:
最开始的dp值全设成无穷大就不用判断i,j是否等于1了
可以根据位置判断当前步数的奇偶性,然后奇数的dp值储存前一个的最小值,偶数的dp值储存现在的整个式子的总和~感觉之前的DP没白练
虽然也有挺多人A了 但是好歹这次进前200了 rate终于能涨点了 倒是挺后悔为啥没早点做 还有10分钟 应该是挤不出200的
贴出来光荣的代码 其实有一个地方可以优化一下的:
最开始的dp值全设成无穷大就不用判断i,j是否等于1了
#include <iostream> #include<cstdio> #include<cstring> using namespace std; int n,m; int a[1005][1005]; int dp[1005][1005]; int main() { // freopen("cin.txt","r",stdin); while(~scanf("%d%d",&n,&m)) { memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf("%d",&a[i][j]); // if(i==0||j==0) dp[i][j]=a[i][j]; } } int tmp=0; int count=0; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(i==0&&j==0) continue; if((i+j)%2!=0){ if(j==1) dp[i][j]=dp[i-1][j]+a[i-1][j]*a[i][j]; else if(i==1) dp[i][j]=dp[i][j-1]+a[i][j-1]*a[i][j]; else dp[i][j]=min(dp[i][j-1]+a[i][j-1]*a[i][j],dp[i-1][j]+a[i-1][j]*a[i][j]); } else { if(i==1&&j!=1) dp[i][j]=dp[i][j-1]; else if(i!=1&&j==1) dp[i][j]=dp[i-1][j]; else dp[i][j]=min(dp[i-1][j],dp[i][j-1]); } } } /** for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { printf("%d ",dp[i][j]); } printf("\n"); }**/ printf("%d\n",dp [m]); } return 0; }
相关文章推荐
- A*寻路算法入门(二)
- A*寻路算法入门(二)
- A*寻路算法入门(二)
- MyEclipse建立SpringMVC入门HelloWorld项目
- python实现将某类文件复制到特定的目录下
- UILable的lineBreakMode
- 1009. Product of Polynomials (25)
- json数据的解析
- 仿QQ5.0侧滑菜单—进阶篇
- Unity中的输入
- 函数与优化
- 数据库锁(一)
- Java中this分类以及在各分类下的用法或规则
- poj-1852
- SSL工作原理
- js对象形式编码风格
- 116 老生常谈session,cookie的区别,安全性
- iOS如何实现表格的折叠效果?
- JavaScript学习之路01_准备
- svn使用发现新问题.