问题描述:
Zealot Yin 所在的X公司需要至少W个其他公司提供的外包人员,现在有N家公司向X公司提供了可选方案,其中
P_i代表可提供外包人员单位数,如5人为一个单位数,若选用该公司方案,则必须采用整单位数的人数,如5人为一个单位数,则X公司只能采用n*5个人数(n=0,1,2,….)。C_i代表为P_i单位数员工提供的总工资,单位是万元
输入格式:
N W
P_i C_i
请问,采取什么样的方案可以满足X公司花最少的开销招到至少W个外包人员,求出最少的开销金额。
例如X公司需要至少15个外包员工,A公司的价格方案是 2万元/每三人,B公司的价格方案是 3万元/每五人。
输入方案为
2 15
3 2
5 3
得到的最少的开销金额为9万元
1 #include "stdafx.h"
2 #include <iostream>
3
4 using namespace std;
5
6 int main(int argc, char* argv[])
7 {
8
9 int N=2, W=15;
10 int p[] = {0,3,5};
11 int c[] = {0,2,3};
12
13 int f[16];
14 f[0] = 0;
15 for (int i=1; i<=W; i++)
16 f[i] = 10000;
17 for (i=1; i<=N; i++)
18 {
19 for (int j=1; j<=W; j++)
20 {
21 if (j>=p[i] && (f[j] > f[j-p[i]]+c[i]))
22 {
23 f[j] = f[j-p[i]]+c[i];
24 }
25 }
26 }
27
28 cout << f[15] << endl;
29
30 // int f[3][16];
31 //
32 // for (int i=0; i<=N; i++)
33 // {
34 // for (int j=0; j<=W; j++)
35 // f[i][j] = 10000;
36 // }
37 //
38 // for (i=1; i<3; i++)
39 // {
40 // f[i][0] = 0;
41 // }
42 //
43 // f[0][0] = 0;
44 //
45 // for (i=1; i<=N; i++)
46 // {
47 // for (int j=1; j<=W; j++)
48 // {
49 // for (int n=0; n<=j/p[i]; n++)
50 // {
51 // if(f[i-1][j-n*p[i]]+n*c[i]<f[i][j])
52 // f[i][j] = f[i-1][j-n*p[i]]+n*c[i];
53 // }
54 // }
55 // }
56
57 // cout << f[2][15] << endl;
58 return 0;
59 }
浙公网安备 33010602011771号