HDU 4848 Wow! Such Conquering! 暴搜+剪枝
2014-08-16 20:05
302 查看
题意:有n个星球,给出穿梭于两两星球花费的时间,每个星球都有一个时间上的deadline,求合法的到达时间的最小和。
思路:思路比较好想,主要是很多细节需要处理,例如需要先floyd出两两的最短路,例如需要添加的强力剪枝。
思路:思路比较好想,主要是很多细节需要处理,例如需要先floyd出两两的最短路,例如需要添加的强力剪枝。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <string> #include <map> #include <stack> #include <vector> #include <set> #include <queue> #define maxn 33 using namespace std; int ans; int n,data[maxn][maxn],visit[maxn],dl[maxn],tim[maxn]; void floyd() { int i,j,k; for(k=1;k<=n;k++) { for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { data[i][j]=min(data[i][j],data[i][k]+data[k][j]); } } } } void dfs(int deep,int temp,int now) { if(temp+tim[now]*(n-deep)>=ans) return ; //printf("%d %d %d %d\n",deep,temp,now,tim); if(deep>=n) { ans=ans<temp?ans:temp; return ; } for(int i=2;i<=n;i++) { if(!visit[i]&&tim[now]+data[now][i]>dl[i]){ //printf("%d %d %d\n",deep,i,data[now][i]); return ;} } for(int i=2;i<=n;i++) { if(visit[i]==0) { visit[i]=1; tim[i]=tim[now]+data[now][i]; if(tim[i]>dl[i]) return; dfs(deep+1,temp+tim[i],i); visit[i]=0; } } } void read(int &a) { int t; while (t = getchar(), isspace(t)); a = t - '0'; while (t = getchar(), !isspace(t)) a = a * 10 + t - '0'; } int main() { //freopen("data.in","r",stdin); while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++){ read(data[i][j]); } } for(int i=2;i<=n;i++) { read(dl[i]); } floyd(); ans=1e9; visit[1]=1; tim[1]=0; dfs(1,0,1); if(ans==1e9) puts("-1"); else printf("%d\n",ans); } return 0; }
相关文章推荐
- HDU-4848 Wow! Such Conquering! (回溯+剪枝)
- Hdu 4848 Wow! Such Conquering!(暴搜+剪枝)
- HDU 4848-Wow! Such Conquering!(DFS+最优性剪枝)
- HDU 4848 Wow! Such Conquering! 深搜+强剪枝
- 【HDU】4848 Wow! Such Conquering! dfs爆搜+强力剪枝
- HDU 4848-Wow! Such Conquering!(DFS+最优性剪枝)
- 最短路 + 搜索 + 剪枝 之 hdu 4848 Wow! Such Conquering!
- 最短路 + 搜索 + 剪枝 之 hdu 4848 Wow! Such Conquering!
- hdu 4848 Wow! Such Conquering! (暴搜+强剪枝)
- hdu 4848 Wow! Such Conquering! (floyd dfs)
- HDU-4848 Wow! Such Conquering! (floyd+dfs+剪枝)
- HDU_4848_Wow! Such Conquering!(Floyd+DFS剪枝)
- HDU 4848 Wow! Such Conquering!
- [HDU 4848][2014西安全国邀请赛]Wow! Such Conquering!
- HDU 4848 Wow! Such Conquering! 搜索+剪枝
- HDU 4848 - Wow! Such Conquering!
- HDU-4848 Wow! Such Conquering! 爆搜+剪枝
- HDU 4848 Wow! Such Conquering! (DFS)
- hdu 4848 Wow! Such Conquering!(搜索)
- hdu 4848 搜索+剪枝 2014西安邀请赛