蓝桥杯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;
}
相关推荐
blasit3 小时前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
AI软著研究员3 小时前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish4 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱5 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者20 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮21 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者21 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考21 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx1 天前
CART决策树基本原理
算法·机器学习
Wect1 天前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript