P2196-DP【黄】
清醒了一点后我又写了一道黄色DP题,做出来了,还行,开心不少了...
中途暴露出一些问题
1、深搜过程中既然用了二维数组,那么深搜时就应该用二维循环取最优解,而不是只从最后一行中进行一维循环取最优解。
2、dfs递归的过程中应该用dfs!!!不应该像个智障一样的忘了用dfs,直接用dp数组忘了递归了。
Code
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <stack>
#include <queue>
#include <map>
#include <unordered_map>
#include <cmath>
#define int long long
using namespace std;
int a[30],m[30][30],dp[30][30],bef[30],N,M;
int dfs(int step,int no)
{
if(dp[step][no]!=-1)return dp[step][no];
if(step==1)return dp[step][no]=a[no];
int DFS=0;
for(int i=1;i<=N;i++)//from i
for(int j=1;j<=step-1;j++)
{
if(i==no)continue;//可以省略这行
if(m[i][no]==0)continue;
if(dp[j][i]+a[no]>DFS)
DFS=dfs(j,i)+a[no],bef[no]=i;
}
return dp[step][no]=DFS;
}
void befdfs(int no)
{
if(no==-1)return;
befdfs(bef[no]);
if(no==M)
cout<<no;
else
cout<<no<<' ';
return;
}
signed main()
{
cin>>N;
for(int i=1;i<=N;i++)cin>>a[i];
for(int i=1;i<=N-1;i++)
{
for(int j=i+1;j<=N;j++)
{
cin>>m[i][j];
//m[j][i]=m[i][j];
}
}
memset(dp,-1,sizeof(dp));
memset(bef,-1,sizeof(bef));
//尝试定义:最多允许访问i并以j为结尾的最优解是dp[i][j],题目未要求i和j所以答案是max{dp[i][j]};
int ans=-1,ansj;
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
if(dfs(i,j)>ans)
{
ans=dfs(i,j);
ansj=j;
}
M=ansj;
befdfs(ansj);
cout<<endl<<ans<<endl;
return 0;
}
P2196-DP【黄】的更多相关文章
- 洛谷P2196 挖地雷(dp)
题意 题目链接 Sol 早年NOIP的题锅好多啊.. 这题连有向边还是无向边都没说(害的我wa了一遍) 直接\(f[i]\)表示到第\(i\)个点的贡献 转移的时候枚举从哪个点转移而来 然后我就用一个 ...
- BestCoder Round #89 02单调队列优化dp
1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01 HDU 5944 水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...
- FZU 1025 状压dp 摆砖块
云峰菌曾经提到过的黄老师过去讲课时的摆砖块 那时百度了一下题目 想了想并没有想好怎么dp 就扔了 这两天想补动态规划知识 就去FZU做专题 然后又碰到了 就认真的想并且去做了 dp思想都在代码注释里 ...
- 合并傻子//区间dp
P1062 合并傻子 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 从前有一堆傻子,钟某人要合并他们~但是,合并傻子是要掉RP的...... 描述 在一个园 ...
- [BZOJ 2165] 大楼 【DP + 倍增 + 二进制】
题目链接:BZOJ - 2165 题目分析: 这道题我读了题之后就想不出来怎么做,题解也找不到,于是就请教了黄学长,黄学长立刻秒掉了这道题,然后我再看他的题解才写出来..Orz 使用 DP + 倍增 ...
- codeforces284 div1 B:概率dp
蛋疼的期末..好久没有A题了,,惭愧啊 昨晚打起精神准备做cf 结果竟然忘记注册了..拿学长号看了看题,今早起来补了一道dp 题目大意: 有n首歌,你需要边听边猜 对于第 i 首歌 每听一分钟你猜出它 ...
- 2017广东工业大学程序设计竞赛初赛 题解&源码(A,水 B,数学 C,二分 D,枚举 E,dp F,思维题 G,字符串处理 H,枚举)
Problem A: An easy problem Description Peter Manson owned a small house in an obscure street. It was ...
- BZOJ 2595: [Wc2008]游览计划 [DP 状压 斯坦纳树 spfa]【学习笔记】
传送门 题意:略 论文 <SPFA算法的优化及应用> http://www.cnblogs.com/lazycal/p/bzoj-2595.html 本题的核心就是求斯坦纳树: Stein ...
- BZOJ 1004: [HNOI2008]Cards [Polya 生成函数DP]
传送门 题意:三种颜色,规定使用每种颜色次数$r,g,b$,给出一个置换群,求多少种不等价着色 $m \le 60,\ r,g,b \le 20$ 咦,规定次数? <组合数学>上不是有生成 ...
- bzoj1010[HNOI2008]玩具装箱toy 斜率优化dp
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 11893 Solved: 5061[Submit][S ...
随机推荐
- 算法1:Fibonacci数列
斐波那契数列(Fibonacci) 一.背景介绍 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为 ...
- pycharm设置Ctrl+鼠标滚轮放大缩小字体
方式一: File --> setting --> Editor-->General,勾选. 方式二: 放大的设置 File --> setting --> Keymap ...
- Object类、String和StringBuffer、Math类、日期处理类
1.Object类 "万物皆对象":(1)从类和对象角度:任何具体事物都是一个对象,. (2)Object类,类似"东西".所有的类都继承了Object类. 使 ...
- 劫持 PE 文件:搜索空间缝隙并插入ShellCode
因近期项目需要弄一款注入型的程序,但多次尝试后发现传统的API都会被安全软件拦截,比如 CreateRemoteThread.SetWindowHookEx.APC.GetThreadContext. ...
- linux中创建新用户并且放到用户组中
1.打开终端并以 root 用户身份登录到 Linux 系统 2.使用以下命令创建一个新用户 sudo useradd -m username 将 "username" 替换为你要 ...
- Serverless: AI everywhere的下一块拼图
摘要:本文介绍华为云函数工作流(FunctionGraph)的灵活.速度,如何让开发人员提升工程效率,缩短TTM等 本文分享自华为云社区<华为云FunctionGraph函数工作流-- Serv ...
- WebKit三件套(3):WebKit之Port篇
了解其有关Port方面的设计,从而了解究竟如何能移植WebKit到自己的应用中. WebKitPort方面的内容是可以很广的,例如可将不同的图形库.网络库与WebCore集成,提供不同的Port接口供 ...
- linux添加用户,修改用户密码,修改用户权限,设置root用户操作
1.添加普通用户 [root@server ~]# useradd chenjiafa //添加一个名为chenjiafa的用户[root@server ~]# passwd chenjiafa ...
- iOS distribution发布证书过期或者被手动revoke了app会被下架吗?
在距离distribution 证书过期一个月(或被手动revoke了)的时候会受到apple的邮件 编辑 虽然distribution过期(或者被手动revoke)了,如果你的开发者账号是co ...
- 火山引擎DataTester:跨境电商网站,如何快速实施AB测试 ?
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 如今中企出海的形态愈加多样,很多企业都建有独立站可直接触达海外客户,但获取优质流量的成本会更加高昂.当优质流量 ...