codeforces 8C - Looking for Order 状态DP
2015-04-19 14:45
531 查看
一个女孩整理箱子,箱子的位置不可以改变,她一次可以拿两个或者是一个行李,女孩移动时间花费是她移动距离的平方。
int dist[maxn][maxn] ; int dp[1<<maxn] , father[1<<maxn] ; pair<int , int> pt[maxn] , p ; int gtd(int i , int j){ return (pt[i].first - pt[j].first) * (pt[i].first - pt[j].first) + (pt[i].second - pt[j].second) * (pt[i].second - pt[j].second) ; } int main(){ int n , x , y ; while(cin>>p.first>>p.second){ scanf("%d" , &n) ; for(int i = 0 ; i < n ; i++) scanf("%d%d" , &pt[i].first , &pt[i].second) ; pt = p ; for(int i = 0 ; i <= n ; i++) for(int j = i+1 ; j <= n ; j++) dist[i][j] = dist[j][i] = gtd(i , j) ; memset(dp , -1 , sizeof(dp)) ; dp[0] = 0 ; for(int i = 0 ; i < (1<<n) ; i++){ if(dp[i] == -1) continue ; for(int j = 0 ; j < n ; j++){ if((i & (1<<j)) == 0){ int t = i ^ (1<<j) ; int dis = dp[i] + 2 * dist[j] ; if(dp[t] == -1 || dp[t] > dis){ dp[t] = dis ; father[t] = i ; } for(int k = 0 ; k < n ; k++){ if((t & (1<<k)) == 0){ int t2 = t ^ (1<<k) ; int dis = dp[i] + dist[j] + dist[j][k] + dist[k] ; if(dp[t2] == -1 || dp[t2] > dis){ dp[t2] = dis ; father[t2] = i ; } } } break ; } } } cout<< dp[(1<<n) - 1]<<endl ; int u = (1<<n) - 1 ; vector<int> ans ; ans.clear() ; while(u){ int f = father[u] ; int c = f ^ u ; ans.push_back(0) ; vector<int> v ; v.clear() ; for(int i = 0 ; i < n ; i++){ if(c & (1 << i)) v.push_back(i+1) ; } for(int i = v.size()-1 ; i >= 0 ; i--) ans.push_back(v[i]) ; u = f ; } ans.push_back(0) ; printf("%d" , ans[ans.size() - 1]) ; for(int i = ans.size() - 2 ; i >= 0 ; i--) printf(" %d" , ans[i]) ; puts("") ; } return 0 ; }
相关文章推荐
- CodeForces 8C - Looking for Order 状态压缩DP..DP降低复杂度
- codeforces 8C - Looking for Order 状态DP
- CodeForces - 8C:Looking for Order
- CodeForces 8C-Looking for Order
- Codeforces Beta Round #8 C. Looking for Order 状压dp
- [codeforces 219D] Choosing Capital for Treeland (树形dp)
- CodeForces 903F Clear The Matrix (状态压缩dp)
- codeforces 908G - New Year and Original Order 数位dp
- codeforces 16E Fish(状态压缩概率DP)
- UVA 10944 Nuts for nuts.. (状态压缩dp)
- Codeforces245H - Queries for Number of Palindromes(区间DP)
- Codeforces 350D - Looking for Owls
- codeforces 285 D Permutation Sum (状态压缩DP)
- Codeforces Beta Round #8 C. Looking for Order 状压DP,路径记录
- Codeforces Beta Round #8 C. Looking for Order 状压
- codeforces 453B Little Pony and Harmony Chest (离散化+dp状态压缩)
- UVA - 10944 Nuts for nuts 状态压缩DP
- codeforces 687C (纸币dp)(状态不好想)
- 状态压缩DP codeforces 244 Problem C. The Brand New Function 和 codeforces 165 E. Compatible Numbers
- Codeforces,Kefa and Dishes,状态压缩DP