题目背景

神偷对艺术馆内的名画垂涎欲滴准备大捞一把。

题目描述

艺术馆由若干个展览厅和若干条走廊组成。每一条走廊的尽头不是通向一个展览厅,就

是分为两个走廊。每个展览厅内都有若干幅画,每副画都有一个价值。经过走廊和偷画都是

要耗费时间的。

警察会在n 秒后到达进口,在不被逮捕的情况下你最多能得到的价值。

输入格式

第一行一个整数 n(n≤600)。

第二行若干组整数,对于每组整数(t,x),t 表示进入这个展览厅或经过走廊要耗费 t

秒的时间,若x>0 表示走廊通向的展览厅内有x 幅画,接下来

x对整数(w,c)表示偷一幅价值为 w 的画需要 c秒的时间。若

x=0 表示走廊一分为二。(t,c≤5; x≤30)

输入是按深度优先给出的。房间和走廊数不超过 300 个。

输出格式

仅一个整数,表示能获得的最大价值。

输入输出样例

输入 #1复制

50
5 0 10 1 10 1 5 0 10 2 500 1 1000 2 18 1 1000000 4

输出 #1复制

1500

这个傻逼题的读入有坑,边读遍处理,靠!

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n,m,dp[10000][10000];
int a[1000],b[1000];
void tree_DP(int x)
{
int t1,t2;
cin>>t1>>t2;
t1*=2;
if(t2>0)
{
for(int i=1; i<=t2; i++)
{
cin>>a[i]>>b[i];
}
for(int i=1; i<=t2; i++)
{
for(int j=n; j>=b[i]+t1; j--)
{
dp[x][j]=max(dp[x][j],dp[x][j-b[i]]+a[i]);
}
}
}
if(t2==0)
{
tree_DP(x*2);
tree_DP(x*2+1);
for(int j=t1; j<=n; j++)
{
for(int k=0; k<=j-t1; k++)
{
dp[x][j]=max(dp[x][j],dp[x*2][j-k-t1]+dp[x*2+1][k]);
}
}
return;
}
}
int main()
{
cin>>n;
n--;
tree_DP(1);
cout<<dp[1][n];
return 0;
}

最新文章

  1. Java Sax解析
  2. Eclipse中使用Git-让版本管理更简单
  3. 深入了解Ant构建工具 命令
  4. ActionBar右边菜单按钮的添加
  5. haha
  6. Java移位运算
  7. LabVIEW设计模式系列——功能全局变量
  8. power desinger 学习笔记三&lt;批量执行sql语句&gt;
  9. b/s客户端和服务器的交互(转)
  10. C++/C#结构体转化-传string给C++
  11. Jenkins中集成Gcov代码覆盖率报告
  12. selenium 基础(一)
  13. Python_pickle模块操作二进制文件
  14. DocumentBuilderFactory.newInstance() 异常解决
  15. OSPFV3综合实验 (第三组)
  16. Android获取本机号码及运营商
  17. 在mongoose中使用正则,参数为变量时的写法
  18. [js]js中变量带var和不带var的区别
  19. 窗体应用程序防腾讯QQ源码
  20. Mongodb下载地址

热门文章

  1. c#声明数组
  2. docker win10 基本指令
  3. Flask 入门(九)
  4. CVPR2020文章汇总 | 点云处理、三维重建、姿态估计、SLAM、3D数据集等(12篇)
  5. 11-Json提取器使用
  6. 实例讲解Springboot整合MongoDB进行CRUD操作的两种方式
  7. Linux 命令系列之 seq
  8. 简单网络编程如何用python来实现
  9. [PHP]$_SERVER参数详情
  10. 利用 PhpQuery 随机爬取妹子图