蓝桥杯dp 负载均衡 传球游戏 摆花 画中漂流

cpp 复制代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int n, m;
struct use
{
	int start;
	int times;
	int resum;
};
int const N = 2e5 + 10;
int arr[N];
vector<use>v[N];
int main()
{
	cin >> n >> m;
	for (int i = 1;i <= n;i++)
	{
		cin >> arr[i];
	}
	for (int i = 1;i <= m;i++)
	{
		int a, b, c, d;
		cin >> a >> b >> c >> d;
		int sum = arr[b];
		/*for (int j = 0;j < v[b].size();j++)
		{
			if (v[b][j].start + v[b][j].times > a)
			{
				sum -= v[b][j].resum;
			}
			else
			{
				vector<use>::iterator it = v[b][j];
			}
		}*/
		
		for (vector<use>::iterator it = v[b].begin();it != v[b].end();)
		{
			if ((*it).start+(*it).times>a)
			{
				sum -= (*it).resum;
				it++;
			}
			else
			{
				vector<use>::iterator tmp = it;
				it = v[b].erase(tmp);
			}
		}
		sum -= d;
		if (sum >= 0)
		{
			cout << sum << endl;
			use u;
			u.start = a;
			u.times = c;
			u.resum = d;
			v[b].push_back(u);
		}
		else
		{
			cout << -1 << endl;
		}
	}
	return 0;
}
cpp 复制代码
#include<iostream>
using namespace std;
int n, m;
int const N = 50;
int dp[50][50];
int main()
{
	cin >> n >> m;
	dp[0][1] = 1;
	for (int i = 1;i <= m;i++)
	{
		for (int j = 1;j <= n;j++)
		{
			if (j == 1)
			{
				dp[i][j] = dp[i - 1][2] + dp[i - 1][n];
			}
			else if (j == n)
			{
				dp[i][j] = dp[i - 1][n - 1] + dp[i - 1][1];
			}
			else
			{
				dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j + 1];
			}
		}
	}
	cout << dp[m][1] << endl;
	return 0;
}
cpp 复制代码
#include<iostream>
#include<algorithm>
using namespace std;
int n, m;
int mod = 1e6 + 7;
int const N = 110;
int dp[N][N];
int arr[N];
int main()
{
	cin >> n >> m;
	dp[0][0] = 1;
	for (int i = 1;i <= n;i++)
	{
		cin >> arr[i];
	}
	//表示前i个数总和为j的方案数
	for (int i = 1;i <= n;i++)
	{
		for (int j = 0;j <= m;j++)
		{
			for (int k = 0;k <= min(arr[i], j);k++)
			{
				dp[i][j] = (dp[i][j] + dp[i - 1][j - k]) % mod;
			}
		}
	}
	cout << dp[n][m] << endl;
	return 0;
}
cpp 复制代码
#include<iostream>
using namespace std;
long long mod = 1e9 + 7;
long long d, t, m;
long long dp[3010][1510];
int main()
{
	cin >> d >> t >> m;
	//表示时间为 i,体力为j 的方案数
	dp[0][m] = 1;
	for (int i = 1;i <= t;i++)
	{
		for (int j = 0;j <= m;j++)
		{
			if ((m - j) * 2 - i + d > 0)
			{
				dp[i][j] = (dp[i - 1][j] + dp[i - 1][j + 1]) % mod;
			}
		}
	}
	cout << dp[t][0] << endl;
	return 0;
}
相关推荐
Han.miracle1 小时前
数据结构——二叉树的从前序与中序遍历序列构造二叉树
java·数据结构·学习·算法·leetcode
北冥湖畔的燕雀2 小时前
C++泛型编程(函数模板以及类模板)
开发语言·c++
mit6.8243 小时前
前后缀分解
算法
独自破碎E4 小时前
判断链表是否为回文
数据结构·链表
你好,我叫C小白4 小时前
C语言 循环结构(1)
c语言·开发语言·算法·while·do...while
Larry_Yanan6 小时前
QML学习笔记(四十二)QML的MessageDialog
c++·笔记·qt·学习·ui
寂静山林6 小时前
UVa 10228 A Star not a Tree?
算法
Neverfadeaway6 小时前
【C语言】深入理解函数指针数组应用(4)
c语言·开发语言·算法·回调函数·转移表·c语言实现计算器
R-G-B6 小时前
【35】MFC入门到精通——MFC运行 不显示对话框 MFC界面不显示
c++·mfc·mfc运行 不显界面·mfc界面不显示
Madison-No77 小时前
【C++】探秘vector的底层实现
java·c++·算法