pojCashier Employment

http://poj.org/problem?id=1275

黑书上详解

今天犯了2了 交了十几次 查错查了几个小时 最后与别人的代码比对 输入有问题 n是组数 受不了

View Code
 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 }
原文地址:https://www.cnblogs.com/shangyu/p/2958209.html