在通信系统中,一个常见的问题是对用户进行不同策略的调度,会得到不同的系统消耗和性能。假设当前有n个待串行调度用户,每个用户可以使用A/B/C三种不同比调度策略,不同的策略会消耗不同的系统资源。请你根据如下规则进行用户调度,并返回总的消耗资源数。。。
规则:
1.相邻的用户不能使用相同的调度策略,例如,第1个用户使用了A策略,则第2个用户只能使用B或者C策略。
2.对单个用户而言,不同的调度策略对系统资源的消耗可以归一化后抽象为数值。例如,某用户分别使用A/B/C策略的系统消耗分别为15/8/17。
3.每个用户依次选择当前所能选择的对系统资源消耗最少的策略(局部最优),如果有多个满足要求的策略,选最后一个。
输入描述:
第一行表示用户个数n
接下来每一行表示一个用户分别使用三个策略的系统消耗resA resB resC
输出描述:
最优策略组合下的总系统资源消耗数
示例1 输入输出示例仅供调试,后台数据一般不包含示例。
输入
3
15 8 17
12 20 9
11 7 5
输出
24
int main()
{
// 题目3
// 题目3
int usrNum = 3;
vector<int> result(usrNum, INT_MAX);
int data[3][3] = { 15, 8, 17,
12, 20, 9,
11, 7, 5 };
vector<vector<int> > dp(usrNum + 1, vector<int>(4, INT_MAX));
vector<vector<int> > res(usrNum, vector<int>(3, INT_MAX));
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
res[i][j] = data[i][j];
}
}
for (int i = 1; i < 4; i++)
{
dp[1][i] = data[0][i - 1];
result[0] = min(result[0], dp[1][i]);
}
dp[0][0] = 0;
for (int i = 2; i <= usrNum; i++)
{
dp[i][1] = min(dp[i - 1][2], dp[i - 1][3]) + res[i - 1][0];
cout << dp[i][1] << endl;
dp[i][2] = min(dp[i - 1][1], dp[i - 1][3]) + res[i - 1][1];
cout << dp[i][2] << endl;
dp[i][3] = min(dp[i - 1][1], dp[i - 1][2]) + res[i - 1][2];
cout << dp[i][3] << endl;
result[i - 1] = min(result[i - 1], min(min(dp[i][1], dp[i][2]), dp[i][3]));
cout << result[i - 1] << endl;
}
//for (int i = 0; i < 3; i++)
//{
// cout << result[i] << endl;
//}
cout << result[2] << endl;
system("pause");
return 0;
}