洛谷 P1270 访问美术馆
2018-02-25 15:47
176 查看
洛谷 P1270 访问美术馆
dp[i][j]=max(dp[i][j],dp[lch][k]+dp[rch][j-k]) dp[i][j]表示到第i条走廊剩余j的时间最多能拿的画的数量
主要的是这道题有个很神奇的输入,本蒟第一次看到,便是便搜索的时候便输入(按照深度有限的搜索顺序搜索)
题目分析
应该也可以说成是一道树依赖背包的问题吧。本题的dp方程还是很好想的dp[i][j]=max(dp[i][j],dp[lch][k]+dp[rch][j-k]) dp[i][j]表示到第i条走廊剩余j的时间最多能拿的画的数量
主要的是这道题有个很神奇的输入,本蒟第一次看到,便是便搜索的时候便输入(按照深度有限的搜索顺序搜索)
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; int tot; int dp[1010][1010]; struct arr{ int cost,val; }t[1010]; template<class T>void ChkMax(T &a,T b){if (a<b)a=b;} inline int read(){ int x=0,w=1;char ch; while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar(); if(ch=='-') w=-1,ch=getchar(); while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+(ch-48),ch=getchar(); return x*w; } void init(int x){ t[x].cost=read();t[x].val=read(); t[x].cost*=2; if(!t[x].val){init(x<<1);init(x<<1|1);} } int dfs(int x,int tt){//dp[i][j]表示到第i条走廊剩余j的时间最多能拿的画的数量。 if (dp[x][tt]>0 || !tt) return dp[x][tt]; if (t[x].val) return dp[x][tt]=min(t[x].val,(tt-t[x].cost)/5); //取min的原因是不能超过剩余时间 for(register int k=0;k<=tt-t[x].cost;++k) dp[x][tt]=max(dp[x][tt],dfs(x<<1,k)+dfs(x<<1|1,tt-t[x].cost-k)); return dp[x][tt]; } int main(){ freopen("P1270.in","r",stdin); freopen("P1270.out","w",stdout); tot=read()-1; init(1); printf("%d",dfs(1,tot)); return 0; }
相关文章推荐
- 洛谷 P1270 “访问”美术馆
- |洛谷|树形DP|P1270 “访问”美术馆
- 洛谷 P1270 “访问”美术馆
- 树形dp-P1270 “访问”美术馆P3360 偷天换日
- P1270 “访问”美术馆
- 【洛谷1270】“访问”美术馆
- 【洛谷1270】“访问”美术馆
- P1270 “访问”美术馆
- 树形dp 访问艺术馆(又称访问美术馆)
- “访问美术馆”
- 洛谷 P1270 “访问”美术馆
- 洛谷 P1270 “访问”美术馆
- luogu 访问”美术馆“ && 偷天换日
- luogu 访问”美术馆“ && 偷天换日
- loadrunner中第二次访问ie不能打开网页的问题
- linux访问window共享的最简单方式
- 在ASP程序中访问Access数据库
- php函数内不能访问函数外的变量原因
- 经常访问
- nginx禁止WEB通过IP访问