记忆化搜索 UVA 103
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记忆化搜索 UVA 103相关的知识,希望对你有一定的参考价值。
#include<stdio.h> #include<algorithm> #include<string.h> #include<vector> #include<iostream> using namespace std; struct node { int wei[40]; }ed[40]; int n,m; int dp[40]; vector<int> map[40]; int path[40]; int dfs(int u) { if (dp[u]) return dp[u]; for (int i = 0; i < map[u].size(); ++i) { int v = map[u][i]; int t = dfs(v) + 1; if (dp[u] < t) dp[u] = t, path[u] = v; } return dp[u]; } bool judge(int a,int b) { int i; bool flag=true; for(i=1;i<=m;i++) { if(ed[a].wei[i]>=ed[b].wei[i]) { flag=false; break; } } return flag; } int main() { int i,j; while(scanf("%d%d",&n,&m)!=EOF) { for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { scanf("%d",&ed[i].wei[j]); } sort(ed[i].wei+1,ed[i].wei+m+1); map[i].clear(); } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(judge(i,j)&&i!=j) map[i].push_back(j); } } int ans=0,lu=0; memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) { int hui=dfs(i); if(ans<hui) { ans=hui; lu=i; } } printf("%d\n",ans+1); printf("%d ",lu); for(i=1;i<=ans;i++) { lu=path[lu]; printf("%d ",lu); } printf("\n"); } return 0; }
以上是关于记忆化搜索 UVA 103的主要内容,如果未能解决你的问题,请参考以下文章
UVa 10651 Pebble Solitaire(DP 记忆化搜索)
UVa 10118 Free Candies (记忆化搜索+哈希)
uva 10123 - No Tipping dp 记忆化搜索