code1043 方格取数
第一次走用dfs枚举每种情况,第二次走用dp求剩下的最大值
设一个点集q用来保存有价值的点,排序,在最后加一个终点:x=m+1,y=m+1,v=0 //m是矩阵长宽
因为v=0的点是没有意义的,所以忽略它们,用q进行dfs
设当前点在q中的下标为p,已经积累的分数为score:
for(int i=p+;i<=n+;i++){
if(q[i].y>=q[p].y){//可以到达
a[q[i].x][q[i].y]=;
dfs(i,score+q[i].v);
a[q[i].x][q[i].y]=q[i].v;
}
}
当p=n+1时,到了终点(n是有价值点的个数,n+1为最后添加的终点)
在残缺的a中dp找到第二次的最大价值,更新ans即可
代码如下:
#include<iostream>
#include<algorithm>
using namespace std; struct Point{
int x,y;
int v;
}q[];
bool cnt(Point c,Point d){
return c.x<d.x || (c.x==d.x && c.y<d.y);
}
int n,m;//m是边长,n是有值的点的个数
int a[][];
int d[][];
int ans=; int dp(){
for(int i=;i<=m;i++){
for(int j=;j<=m;j++){
d[i][j]=max(d[i-][j],d[i][j-])+a[i][j];
}
}
return d[m][m];
} void dfs(int p,int score){
if(p==n+){
int c=dp();
if(ans<c+score)ans=c+score;
return;
}
for(int i=p+;i<=n+;i++){
if(q[i].y>=q[p].y){//可以到达
a[q[i].x][q[i].y]=;
dfs(i,score+q[i].v);
a[q[i].x][q[i].y]=q[i].v;
}
}
} int main(){
cin>>m;
for(n=;true;n++){
cin>>q[n].x>>q[n].y>>q[n].v;
if(q[n].x==){n--;break;}
a[q[n].x][q[n].y]=q[n].v;
}
sort(q+,q+n+,cnt);
q[n+].x=m+;q[n+].y=m+;q[n+].v=;//终点
dfs(,);
cout<<ans<<endl; return ;
}
如果你看着那个a和q有点重复不爽,可以试着直接在q上dp,这样就可以省去a了
ps:code上用operator为什么编译不过去!!求解!!
code1043 方格取数的更多相关文章
- HDU 1565&1569 方格取数系列(状压DP或者最大流)
方格取数(2) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- NOIP200003方格取数
NOIP200003方格取数 难度级别: D: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 XYZ 是首师大附中信息技术团编 ...
- vijos 1563 疯狂的方格取数
P1653疯狂的方格取数 Accepted 标签:天才的talent[显示标签] 背景 Due to the talent of talent123,当talent123做完NOIP考了两次的二取 ...
- [HDU 1565+1569] 方格取数
HDU 1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)
HDU 1565 方格取数(1) 给你一个n*n的格子的棋盘,每个格子里面有一个非负数.从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的 ...
- HDU-1565 方格取数(1)
http://acm.hdu.edu.cn/showproblem.php?pid=1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others) Me ...
- BZOJ 1475: 方格取数( 网络流 )
本来想写道水题....结果调了这么久!就是一个 define 里面少加了个括号 ! 二分图最大点权独立集...黑白染色一下 , 然后建图 : S -> black_node , white_no ...
- [动态规划]P1004 方格取数
---恢复内容开始--- 题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 ...
- P2045 方格取数加强版
P2045 方格取数加强版 题目描述 给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= 1000)现在从(1,1)出发,可以往右或者往下走,最后到达(n,n),每达到一格,把该格 ...
随机推荐
- vs2012加载T4MVC模板
(1)在工程项目上右键点击“管理NuGet程序包”,在线搜索T4MVC模板,选择并安装,安装成功后,项目中会添加T4MVC.tt文件及子文件. (2)如果添加了新的控制器,则右击T4MVC.tt文件点 ...
- 初学HTML之HTML介绍
众所周知现在的H5.大数据.云计算都是热门的.其实想学好一门语言重点是多看多想多写多练. 我在博客中会从基础开始讲解HTML4.0.中间加入HTML5的新标签 在这先给大家推荐几个开发工具: note ...
- C# 操作iis6、iis7 301
iis6版本方法... iis7以及以上版本方法 using (ServerManager serverManager = new ServerManager()) { ...
- 利用nginx_push_stream_module实现服务器消息推送
NGiNX_HTTP_Push_Module 是一个 Nginx 的扩展模块,它实现了 HTTP Push 和Comet server的功能.HTTP Push 被经常用在网页上主动推的技术,例如一些 ...
- 为什么 JSON 接口的数据都要加双引号!!!不能用单引号
原因是:Javascript 在很多时候会把 JSON 对象里面没有双引号包围的值,当做数值处理.比如: {"a":987654321} 这个 JSON 里头的变量 a,会被当做一 ...
- OpenCV for Python常用命令
读取图像首先要导入OpenCV包 import cv2 OpenCV目前支持读取bmp.jpg.png.tiff等常用格式. //读取图片 img2 = cv2.imread('out-0022. ...
- oracle系统表v$session、v$sql字段说明(转)
在本视图中,每一个连接到数据库实例中的 session都拥有一条记录.包括用户 session及后台进程如 DBWR, LGWR, arcchiver等等. V$SESSION中的常用列 V$SESS ...
- Oracle数据库学习笔记(一)
Oracle的体系结构大体上分为两部分:Instance(实例)和Database(数据库). Instance(实例) :在Oracle Instance中主要包含了SGA以及一些进程(例如:P ...
- cocos2d中的坐标系统
cocos2d中Layer的默认锚点是left.buttom sprite的锚点设置 setAnchorPoint(cc.p(0.5,0.5)); 默认锚点:中心 setAnchorPoint(cc. ...
- A generic error occurred in GDI+的解决方案
转自智慧光原文A generic error occurred in GDI+. 解决方法 使用image1.RotateFlip(RotateFlipType.Rotate90FlipNone)方法 ...