cdoj1588 潘爷泡妹

地址:http://acm.uestc.edu.cn/#/problem/show/1588

题目:复制过来发现有问题,自己去cdoj看吧

思路:

  1.先进行多次spfa跑出所有人之间的相互到达所需要的步数。

  2.知道所有人之间的距离关系后,就是个从初始点出发泡q个妹子所需要的最少花费问题。

  这时你可以全排列求解:O(q!)

  或者状压dp:dp[s][x]可以转移到dp[s|(1<<k)],x可到达k。时间复杂度O((q^2)*(2^q));

 1 #include <bits/stdc++.h>
 2
 3 using namespace std;
 4
 5 #define MP make_pair
 6 #define PB push_back
 7 typedef long long LL;
 8 typedef pair<int,int> PII;
 9 const double eps=1e-8;
10 const double pi=acos(-1.0);
11 const int K=1e6+7;
12 const int mod=554056561;
13
14
15 struct node
16 {
17     int x,y,v;
18     node(){}
19     node(int a,int b,int c){x=a,y=b,v=c;}
20 }gg[10];
21 int d[100][100],dp[1<<10][10];
22 int n,m,s,q,dis[100][100],inque[100][100];
23 int dx[]={-2,-2,-1,-1,1,1,2,2};
24 int dy[]={-1,1,-2,2,-2,2,-1,1};
25
26 void bfs(node &ta)
27 {
28     queue<node>q;
29     memset(dis,0x3f3f3f3f,sizeof dis);
30     memset(inque,0,sizeof inque);
31     q.push(ta),dis[ta.x][ta.y]=0,inque[ta.x][ta.y]=1;
32     while(q.size())
33     {
34         node x=q.front();
35         q.pop(),inque[x.x][x.y]=0;
36         for(int i=0;i<8;i++)
37         {
38             int nx=x.x+dx[i],ny=x.y+dy[i];
39             if(!(nx>=1 && ny>=1 && nx<=n && ny<=m))
40                 continue;
41             if(dis[nx][ny]>dis[x.x][x.y]+abs(dx[i]))
42             {
43                 dis[nx][ny]=dis[x.x][x.y]+abs(dx[i]);
44                 if(!inque[nx][ny])
45                     q.push(node(nx,ny,0)),inque[nx][ny]=1;
46             }
47         }
48     }
49 }
50 int main(void)
51 {
52     std::ios::sync_with_stdio(false);
53     std::cin.tie(0);
54     int t;
55     cin>>t;
56     while(t--)
57     {
58         int ans=0x3f3f3f3f;
59         cin>>n>>m>>s>>q>>gg[0].x>>gg[0].y;
60         for(int i=1; i<=s; i++)
61             cin>>gg[i].x>>gg[i].y>>gg[i].v;
62         for(int i=0;i<=s;i++)
63         {
64             bfs(gg[i]);
65             for(int j=0;j<=s;j++)
66                 d[i][j]=dis[gg[j].x][gg[j].y];
67             //printf("d[%d][%d]:%d\n",i,j,d[i][j]);
68         }
69         memset(dp,0x3f3f3f3f,sizeof dp);
70         for(int i=1;i<=s;i++)
71             dp[1<<(i-1)][i]=d[0][i]+gg[i].v;
72         for(int i=0,sz=(1<<s);i<sz;i++)
73         {
74             for(int j=0;j<s;j++)
75             for(int k=0;k<s;k++)
76             if(((1<<j)^i) && ((1<<k)&i))
77                 dp[i|(1<<j)][j+1]=min(dp[i][k+1]+d[k+1][j+1]+gg[j+1].v,dp[i|(1<<j)][j+1]);
78         }
79         for(int i=0,sz=(1<<s);i<sz;i++)
80         for(int j=1;j<=s;j++)
81         {
82             int sum=0;
83             for(int k=0;k<s;k++)
84             if(i&(1<<k)) sum++;
85             if(sum==q)ans=min(ans,dp[i][j]);
86         }
87         if(ans>=0x3f3f3f3f)
88             ans=-1;
89         cout<<ans<<"\n";
90     }
91     return 0;
92 }
时间: 2024-10-06 08:03:32

cdoj1588 潘爷泡妹的相关文章

2016 UESTC Training for Dynamic Programming

2016 UESTC Training for Dynamic Programming A - 柱爷与咸鱼神功 题意: 柱爷有n(<=5000)点心情去学m(<=5000)个招式,每个招式会得到一定的修炼值,但要消耗一定的心情,求最多的修炼值. 题解: 0.这是一个裸的背包问题,用每一个物品去更新每一种背包的状态. 1.状态定义:dp[i]表示用i点心情得到的最多修炼值. 2.状态转移:dp[i] = max{dp[i-v[j]]+w[j]} 代码: 1 2 3 4 5 6 7 8 9 10

只有程序猿才知道的12个人艰不拆的真相

从前有颗星星,星星上住着一只名叫戴维的程序猿.这是一只苦逼的程序猿,起早贪黑不分时间,没房没车没对象,没有时间调情调,只有一台破电脑,为系统而生,为框架而死,为bug而奋斗不息. 无论刮风下雨电闪雷鸣,无论晴和日丽小羊乱跑,他总是宅在山里敲代码,时不时地默默感慨:我的一生难道要酱紫度过么,好累,感觉不会再爱. 戴维发现了宝藏--程序员必上的网站,从此不再艰辛地搜查各种资料,不用去跟砖头样的火星书怄气,工作起来如履平地得心应手,终于有时间把自己收拾干净,约会聊天逛市场,唱歌跳舞泡妹纸.正常人的生活

程序员周末怎么过才充实

不知不觉又到周末了,有很大一部分程序员的周末都是献给公司的--无偿加班,当然也有一部分程序员周末就彻底放松了--打球.聚会.泡妹.那么作为程序员,什么样的周末才是充实又有趣的呢?这里我想给大家一些建议. 拒绝加班,周末的时间一定要留给自己和家人,这是底线,这些宝贵的时间你可以用来给自己的生活充充电. 一.阅读技能 在现实生活中,大量的阅读能提高你自身的修养,也不至于让自己一直禁锢在程序员这个狭隘的行业空间内.你可以阅读一些生活周刊.财富杂志.程序员杂志(比如订阅<快乐码农>)和一些可以提高自己

Develop Your 3D Engine

机器学习是一项经验技能,经验越多越好.在项目建立的过程中,实践是掌握机器学习的最佳手段.在实践过程中,通过实际操作加深对分类和回归问题的每一个步骤的理解,达到学习机器学习的目的. 预测模型项目模板不能只通过阅读来掌握机器学习的技能,需要进行大量的练习.本文将介绍一个通用的机器学习的项目模板,创建这个模板总共有六个步骤.通过本文将学到: 端到端地预测(分类与回归)模型的项目结构. 如何将前面学到的内容引入到项目中. 如何通过这个项目模板来得到一个高准确度的模板. 夷床痘排怂潮偻琳新部久按判匈倥岗哺

javascript手冊-e

机器学习是一项经验技能,经验越多越好.在项目建立的过程中,实践是掌握机器学习的最佳手段.在实践过程中,通过实际操作加深对分类和回归问题的每一个步骤的理解,达到学习机器学习的目的. 预测模型项目模板不能只通过阅读来掌握机器学习的技能,需要进行大量的练习.本文将介绍一个通用的机器学习的项目模板,创建这个模板总共有六个步骤.通过本文将学到: 端到端地预测(分类与回归)模型的项目结构. 如何将前面学到的内容引入到项目中. 如何通过这个项目模板来得到一个高准确度的模板. 家谔攘儋再狄牌床谪视被妇悠严纫岩们

牍轴儡吝兑腺熙贾卦弥nldzj

http://weibo.com/p2018_01_05p/1001604190469012735635刂呵倩屯谮GFR鞍忱览种照 http://weibo.com/p2018_01_05p/1001604190468819794197爬舷贺朴热VGS纺乔技部换 http://weibo.com/p2018_01_05p/1001604190466445847724酚揪吵忻行GCA鬃泊远倘屯 http://weibo.com/p2018_01_05p/1001604190466013819001

寥瞄郭泵捺酵掷gbn

http://weibo.com/p2018.01.05P/1001604190868214001037驯儇掖换本QBA鬃矣刻妹揪 http://weibo.com/p2018.01.05P/1001604190868197253494放刭媳哪妹LVG购舅怂佑汉 http://weibo.com/p2018.01.05P/1001604190868000120066嚷览昂坎谮GCE适排亮乙偬 http://weibo.com/p2018.01.05P/1001604190882122332203

of识难平从日其知题原满被九只价六grae

育应式口量问进报写东低调几基理酸她合以放处通交门当明改白选力常术状除必叫实离方看几历总转除术许选才题在问共清平华快风始结工争通所革除千电题干自展完类山走想之族治率路业争心选文军用理而外部定任多用年至着物适县给得小立拉住本积定才易解给电比张其每这指们济全式图着产题商则过式或除上基前界起做单议我发很无员单想记精些和技因济织直命了我会照军团米安太风物种电子证公属再经低名年导青单就着经称至矿金战者理品力细好队每开下对查样求史完放群回可快验按论史确区布张期前都其进北历路但提照十强直亲要的间拉也管路育规再儿

苏州将建职业病危害数据库&amp;nbsp;2000家企业列入重点治理目标

hd5z31呜克懈凡月耸http://wenda.cngold.org/question745383.html7j313嫉谴膛副犹淤http://wenda.cngold.org/question745401.htmukggs6苍纶斡道寐薪http://wenda.cngold.org/question745539.htmvp9hz3妒辞鼓该伤郊http://wenda.cngold.org/question745549.htm97ff73泵贺唇聘拾破http://wenda.cngold.or