http://poj.org/problem?id=1275
黑书上详解
今天犯了2了 交了十几次 查错查了几个小时 最后与别人的代码比对 输入有问题 n是组数 受不了
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<stdlib.h> 5 #include<queue> 6 #define INF 0x3f3f3f 7 using namespace std; 8 int n,m,g,t[30],r[30],ans,dis[50]; 9 struct node 10 { 11 int u,v,w; 12 }e[2100]; 13 int bellford() 14 { 15 int i,j,flag; 16 for(i = 1; i <= 24 ; i++) 17 dis[i] = INF; 18 dis[0] = 0; 19 for(i = 0; i <= 25 ; i++) 20 { 21 flag = 0; 22 for(j = 1; j <= g ; j++) 23 { 24 if(dis[e[j].v]>dis[e[j].u]+e[j].w) 25 { 26 dis[e[j].v] = dis[e[j].u]+e[j].w; 27 flag = 1; 28 } 29 } 30 if(!flag) 31 return 1; 32 } 33 return 0; 34 } 35 void add(int u,int v,int w) 36 { 37 g++; 38 e[g].u = u; 39 e[g].v = v; 40 e[g].w = w; 41 } 42 int main() 43 { 44 int i,j,a,sum; 45 cin>>n; 46 while(n--) 47 { 48 g = 0; 49 memset(t,0,sizeof(t)); 50 for(i = 1; i <= 24 ; i++) 51 { 52 cin>>r[i]; 53 } 54 cin>>m; 55 for(i = 1; i <= m;i++) 56 { 57 cin>>a; 58 t[a+1]++; 59 } 60 for(i = 1; i <= 24 ;i++) 61 { 62 add(i-1,i,t[i]); 63 add(i,i-1,0); 64 } 65 for(sum = 0; sum <= m ; sum++) 66 { 67 g = 48; 68 for(i=1;i<=16;i++) 69 add(i+8,i,-r[i+8]); 70 for(i=17;i<=24;i++) 71 add(i-16,i,sum-r[i-16]); 72 add(24,0,-sum); 73 if(bellford()) 74 { 75 cout<<sum<<endl; 76 break; 77 } 78 } 79 if(sum==m+1) printf("No Solution\n"); 80 } 81 return 0; 82 }