通信系统调度问题 C++动态规划

在通信系统中,一个常见的问题是对用户进行不同策略的调度,会得到不同的系统消耗和性能。假设当前有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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值