POJ 3249 Test for Job(DAG上的dp + 记忆化搜索)
2017-02-23 17:48
411 查看
题意:出发点(入度为0),终点(出度为0),都可能不止一个;求从出发点到目标点的最大收获或最少消费(有些城市值为负,表示消费)
思路:记忆化搜索避免超时。
AC代码如下:
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
#define INF 2147483647
const int maxn=1e5+10;
int v[maxn]; //保存值
int d[maxn]; //用于记忆化搜索
int root[maxn]; //统计入度
int n,m;
vector<int>vec[maxn];
int dp(int i){
int&ans=d[i];
if(ans!=0)return ans;
int len=vec[i].size();
if(len==0)return v[i];
ans=-INF;
for(int j=0;j<len;j++)
ans=max(ans,dp(vec[i][j])+v[i]);
return ans;
}
int main(){
while(scanf("%d%d",&n,&m)==2){
memset(d,0,sizeof(d));
memset(root,0,sizeof(root));
for(int i=1;i<=n;i++)scanf("%d",&v[i]);
for(int i=1;i<=m;i++){
int a,b;
scanf("%d%d",&a,&b);
vec[a].push_back(b);
root[b]++;
}
int ans=-INF;
for(int i=1;i<=n;i++){
if(!root[i]) //刚开始没用这个判断,当所有点的值大于0时没问题,小于0就会出问题了
ans=max(ans,dp(i));
}
printf("%d\n",ans);
for(int i=1;i<=n;i++)
vec[i].clear();
}
return 0;
}
思路:记忆化搜索避免超时。
AC代码如下:
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
#define INF 2147483647
const int maxn=1e5+10;
int v[maxn]; //保存值
int d[maxn]; //用于记忆化搜索
int root[maxn]; //统计入度
int n,m;
vector<int>vec[maxn];
int dp(int i){
int&ans=d[i];
if(ans!=0)return ans;
int len=vec[i].size();
if(len==0)return v[i];
ans=-INF;
for(int j=0;j<len;j++)
ans=max(ans,dp(vec[i][j])+v[i]);
return ans;
}
int main(){
while(scanf("%d%d",&n,&m)==2){
memset(d,0,sizeof(d));
memset(root,0,sizeof(root));
for(int i=1;i<=n;i++)scanf("%d",&v[i]);
for(int i=1;i<=m;i++){
int a,b;
scanf("%d%d",&a,&b);
vec[a].push_back(b);
root[b]++;
}
int ans=-INF;
for(int i=1;i<=n;i++){
if(!root[i]) //刚开始没用这个判断,当所有点的值大于0时没问题,小于0就会出问题了
ans=max(ans,dp(i));
}
printf("%d\n",ans);
for(int i=1;i<=n;i++)
vec[i].clear();
}
return 0;
}
相关文章推荐
- POJ 3249 Test for Job(记忆化搜索)
- POJ 3249 Test for Job(记忆化搜索)
- poj 3249 Test for Job 图上dp(记忆化搜索)
- poj3249(记忆化搜索)Test for Job
- POJ 3249 Test for Job (记忆化搜索 好题)
- POJ - 3249 Test for Job (DAG+topsort)
- POJ - 3249 Test for Job (DAG+topsort)
- Test for Job (poj 3249 记忆化搜索)
- 【DAG && 拓扑】POJ - 3249 Test for Job
- Test for Job (poj 3249 记忆化搜索)
- POJ-3249 Test for Job DAG最短路
- POJ3249 Test for Job(记忆化搜索)
- poj3249 Test for Job --- 拓扑排序
- POJ 3249 Test for Job 拓扑图DP
- poj 3249 Test for Job
- POJ 3249 Test for Job 拓扑排序+DP
- POJ 3249 Test for Job 解题报告 DP
- POJ 3249-Test for Job(拓扑排序&&DP)
- poj 3249 Test for Job (记忆化深搜)
- POJ 3249 Test for Job