uvalive5983(二分+dp)
来源:互联网 发布:白象梳篦淘宝店铺 编辑:程序博客网 时间:2024/06/05 08:48
题意:
给出一个n*m的图,从左上角出发,去右下角,只能向下或者向右走,每个格子有权值,问如何安排你在左上角时的权值,使得到达右下角时权值大于1。
思路:
题中给出10m时限,于是我就二分答案+dp验证咯,具体看代码。
代码:
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<queue>#include<cstdlib>#include<cmath>using namespace std;#define MM 1000000000int num[600][600];int vis[600][600];int n,m;int low,high;int dfs(int x) {vis[1][1]=x;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){if(i==1&&j==1)continue;vis[i][j]=max(vis[i-1][j],vis[i][j-1])+num[i][j];if(vis[i][j]<=0)vis[i][j]=-MM;}if(vis[n][m]>0)return 1;return 0;}void init(){for(int i=1;i<=n;i++) vis[i][0]=-MM;for(int j=1;j<=m;j++)vis[0][j]=-MM;low=1; high=MM;return ;}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",&num[i][j]);init();while(low<=high){int mid=(low+high)/2;if(dfs(mid))high=mid-1;else low=mid+1;}int ans=high+1;printf("%d\n",ans);}return 0;}
0 0
- uvalive5983(二分+dp)
- HDU 3646 DP + 二分
- hdu 4604 二分+dp
- HDU 1025 DP + 二分
- 【二分】【DP】SOFTWARE
- hdu3586,树形dp+二分
- lightoj 1180 二分+DP
- 【自用模板】二分dp
- hdu3586(树形dp+二分)
- poj 2397(二分+dp)
- uvalive4625(dp + 二分)
- uvalive3608(二分 + DP)
- spoj1182(数位dp+二分)
- hdu3433(dp+二分)
- uva 1443 dp+二分
- uva 1371 dp+二分
- codeforces830A (二分|DP)
- HDU6103 Kirinriki-dp+二分
- Jpa规范中persistence.xml 配置文件解析
- USB Type-C
- SDUT-3303-来发背包开开胃
- 48.iOS动画和理解position与anchorPoint
- POJ 题目3623 Best Cow Line, Gold(后缀数组rank简单应用)
- uvalive5983(二分+dp)
- C++11特有的数值、数组初始化方法、常量的符号名称 const和浮点数、bool、自动推断类型auto
- Linux xargs 命令
- Mysql导出表结构及表数据 mysqldump用法
- 3.solr5全量索引和增量索引配置
- 【笔试】31、在O(1)时间删除链表节点
- django 1.8 官方文档翻译: 1-1-1 Django初探
- Windows上用VAGRANT创建运行管理VirtualBox虚拟机
- 维护通讯录的方法及群组通讯录 管理平台