- 1#include 2#include < string.h > 3#include 4#define M 41 5#define min(a, b)(a 6#define max(a, b)(a > b ? a: b) 7#define inf 1 << 30 8 using namespace std; 9 int time[M][4]; 10 int c1, c2, com, g, stime; //c1 c2存两个独立cpu的时间(不是同时进行 com存同时进行的时间 g存gpu的时间
- 11 int n; 12 void slove(int k, int c1, int c2, int com, int g, int sum) 13 {
- 14
- if (k <= n) 15
- for (int i = 0; i < 4; i++) 16
- switch (i) 17 {
- 18
- case 0:
- //1*cpu
- 19 c1 < c2 ? slove(k + 1, c1 + time[k][i], c2, com, g, max(max(c1 + time[k][i], c2) + com, g)) : 20 slove(k + 1, c1, c2 + time[k][i], com, g, max(max(c1, c2 + time[k][i]) + com, g));
- 21
- break;
- 22
- case 1:
- //2*cpu
- 23 slove(k + 1, c1, c2, com + time[k][i], g, max(max(c1, c2) + com + time[k][i], g));
- 24
- break;
- 25
- case 2:
- 26 c1 < c2 ? slove(k + 1, c1 + time[k][i], c2, com, g + time[k][i], max(max(c1 + time[k][i], c2) + com, g + time[k][i])) : 27 slove(k + 1, c1, c2 + time[k][i], com, g + time[k][i], max(max(c1, c2 + time[k][i]) + com, g + time[k][i]));
- 28
- break;
- 29
- case 3:
- 30 slove(k + 1, c1, c2, com + time[k][i], g + time[k][i], max(max(c1, c2) + com + time[k][i], g + time[k][i]));
- 31
- break;
- 32
- }
- 33
- else 34
- if (stime > sum) 35 stime = sum;
- 36
- }
- 37 int main() 38 {
- 39 stime = inf;
- 40 c1 = c2 = g = com = 0; //初始化
- 41 cin >> n;
- 42
- for (int i = 1; i <= n; i++) 43
- for (int j = 0; j < 4; j++) 44 cin >> time[i][j];
- 45 slove(1, 0, 0, 0, 0, 0);
- 46 cout << stime << endl;
- 47
- return 0;
- 48
- }
来源: http://www.bubuko.com/infodetail-1966839.html