第一次走用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 方格取数的更多相关文章

  1. HDU 1565&1569 方格取数系列(状压DP或者最大流)

    方格取数(2) Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  2. NOIP200003方格取数

    NOIP200003方格取数 难度级别: D: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 XYZ 是首师大附中信息技术团编 ...

  3. vijos 1563 疯狂的方格取数

    P1653疯狂的方格取数 Accepted 标签:天才的talent[显示标签]   背景 Due to the talent of talent123,当talent123做完NOIP考了两次的二取 ...

  4. [HDU 1565+1569] 方格取数

    HDU 1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  5. 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)

      HDU 1565 方格取数(1) 给你一个n*n的格子的棋盘,每个格子里面有一个非负数.从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的 ...

  6. HDU-1565 方格取数(1)

    http://acm.hdu.edu.cn/showproblem.php?pid=1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others)    Me ...

  7. BZOJ 1475: 方格取数( 网络流 )

    本来想写道水题....结果调了这么久!就是一个 define 里面少加了个括号 ! 二分图最大点权独立集...黑白染色一下 , 然后建图 : S -> black_node , white_no ...

  8. [动态规划]P1004 方格取数

    ---恢复内容开始--- 题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 ...

  9. P2045 方格取数加强版

    P2045 方格取数加强版 题目描述 给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= 1000)现在从(1,1)出发,可以往右或者往下走,最后到达(n,n),每达到一格,把该格 ...

随机推荐

  1. ios生成自签名证书,实现web下载安装app

    抄自http://beyondvincent.com/blog/2014/03/17/five-tips-for-using-self-signed-ssl-certificates-with-ios ...

  2. eclipse和myeclipse的he user operation is wating问题

    近做了一个MyEclipse项目,但是没开始多久就发现了这个问题:只要文件被修改过,不论多小的修改,保存的时候都会跳出一个框框,里面写着the user operation is wating.... ...

  3. dts、dtb编译

    设备树(Device Tree)包括DTC(device tree compiler),DTS(device tree source和DTB(device tree blob). dtc编译器能够把 ...

  4. Oracle通过JDBC插入数据时,自增ID如何自动增长

    一.通过触发器的方式 CREATE OR REPLACE TRIGGER tg_test BEFORE INSERT ON Userinfo FOR EACH ROW WHEN (new.userNo ...

  5. JAVA for循环语句的循环变量类型问题

    class HalfDollars { public static void main(String [] arguments) { int[] denver = {1_900_000,1_700_0 ...

  6. sqlserver并发处理,锁和事务

      本文系转载,谢谢:http://www.cnblogs.com/cxd4321/archive/2008/12/10/1351792.html     另外这个也不错 http://www.cnb ...

  7. 第五章 服务容错保护: Spring Cloud Hystrix

    在微服务架构中, 存在着那么多的服务单元, 若一个单元出现故障, 就很容易因依赖关系而引发故障的蔓延,最终导致整个系统的瘫痪,这样的架构相较传统架构更加不稳定.为了解决这样的问题, 产生了断路器等一系 ...

  8. 5 matplotlib-绘制精美的图表

    matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. 它的文档相当完备, ...

  9. Mysql进行复杂查询

    1.查询“生物”课程比“物理”课程成绩高的所有学生的学号: 思路: (1)获取所有选了 生物 课程的学生的成绩(学号,成绩) --临时表     (2)获取所有选了 物理 课程的学生的成绩(学号,成绩 ...

  10. leetcode914

    public class Solution { public bool HasGroupsSizeX(int[] deck) { var len = deck.Length; ; i <= le ...