qduoj 分辣条2

本文介绍了一个使用动态规划(DP)解决辣条公平分配问题的例子。问题要求将总重量为n的大辣条,按照重量a、b或c分配给尽可能多的小朋友,并确保没有剩余。文章提供了一段C++代码实现,通过状态转移方程实现最优解。

分辣条2

发布时间: 2016年7月2日 21:47   最后更新: 2016年7月2日 21:51   时间限制: 1000ms   内存限制: 128M

啊啊有根很大的辣条,重量为n,啊啊想把辣条分给很多小朋友,但是必须满足下列条件:

1.每个小朋友分得的辣条重量为a,b或c;

2.分得辣条的小朋友的数量最多;

3.没有剩余的辣条,也就是说所有辣条都分完啦。

帮帮啊啊找出能分得辣条小朋友的数量。

有多组数据,每组数据包含4个整数n,a,b,c(1<=n,a,b,c<=4000)

每组数据输出能分得辣条的小朋友数量,每组输出占一行

 复制
5 5 3 2
2
 复制
7 5 5 2
2

dp思想,自己没想出来怎么做,请教的别人,一种状态转移思想,发现dp真的好奇妙


#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
int dp[5000];
int main()
{
	int a,b,c,n;
	while(~scanf("%d%d%d%d",&n,&a,&b,&c))
	{
		memset(dp,-inf,sizeof(dp));
		dp[0]=0; 
		for(int i=a;i<=n;i++)
			dp[i]=max(dp[i],dp[i-a]+1);
		for(int i=b;i<=n;i++)
			dp[i]=max(dp[i],dp[i-b]+1);
		for(int i=c;i<=n;i++)
			dp[i]=max(dp[i],dp[i-c]+1);
		//	for(int i=0;i<=n;i++)
		//	printf("%d ",dp[i]); 
		printf("%d\n",dp[n]);
	}
	return 0;
}





### 绘制形状的方法 要实现类似的形状或图案,可以利用 Python 的绘图库 `matplotlib` 或者更灵活的图形处理工具如 `Pillow` 和 `turtle`。以下是通过这些方法来创建类似于形状的具体方式。 #### 使用 Matplotlib 创建波浪形线 Matplotlib 是一种强大的数据可视化工具,可以通过绘制正弦曲线或其他周期函数模拟弯曲的效果: ```python import numpy as np import matplotlib.pyplot as plt # 定义参数 x = np.linspace(0, 10 * np.pi, 500) # X轴范围和密度 y = np.sin(x) + 0.2 * x # Y轴基于正弦波动并增加线性增长效果 plt.figure(figsize=(8, 2)) # 设置画布大小 plt.plot(x, y, color='red', linewidth=3) # 红色表示颜色 plt.axis('off') # 隐藏坐标轴 plt.fill_between(x, y, color='orange', alpha=0.3) # 填充内部区域为橙色 plt.show() ``` 上述代码生成了一种带有红色外边框以及淡黄色填充的波浪状结构[^1]。 #### 利用 Turtle 库制作动态动画 Turtle 提供了一个简单易懂的方式用于构建二维矢量图形,并支持实时渲染过程中的路径追踪功能。这非常适合用来演示像手工搓揉面团那样形成一细长而扭曲的食物形象的过程。 ```python import turtle screen = turtle.Screen() pen = turtle.Turtle() pen.speed(0) pen.color("darkred", "salmon") # 外壳深红,内里浅粉 pen.begin_fill() for _ in range(10): # 控制重复次数调整长度 pen.forward(50) # 向前移动距离 pen.right(45) # 转向角度控制弯度 pen.end_fill() screen.mainloop() ``` 此脚本定义了一个循环操作,在每次迭代过程中向前推进一定单位后再右转固定的角度值从而构成连续性的螺旋轨迹[^2]。 #### 结合 PIL (Python Imaging Library) 构建静态图像文件 如果目标只是单纯保存一张代表外观特征的图片而不是即时显示,则推荐采用 Pillow 模块完成任务。它允许我们精确指定像素级细节进而获得更加逼真的视觉呈现效果。 ```python from PIL import Image, ImageDraw width, height = 600, 100 img = Image.new('RGB', (width, height), 'white') draw = ImageDraw.Draw(img) points = [(i / width * 2 * np.pi, int((np.sin(i / width * 2 * np.pi)*height/4)+height//2)) for i in range(width)] draw.line(points, fill="firebrick", width=7) del draw img.save("ladao.png") print("Image saved!") ``` 这段程序先初始化一块空白画布接着逐点描绘出一随时间变化起伏不定的红线最后导出成果至本地磁盘作为 PNG 文件存储下来[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值