[蓝桥杯复习] 鸣人的影分身

题目链接

问题的本质就是求将 n n n拆成 m m m份的方案数,和求 n n n个苹果放在 m m m个盘子的方案数是一个问题。

方法一:暴力dfs

#include<bits/stdc++.h>
#define FAST ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define INF 0x3f3f3f3f
typedef long long ll;
const int maxn = 1e5+5;

using namespace std;

int m,n;
int ans;
int record[maxn];

void dfs(int x, int sum, int lst)
{
	if (x==n+1){
		if (sum==0){
			ans++;
//			for (int i=1; i<=x-1; i++){
//				printf("%d ",record[i]);
//			}
//			printf("\n");
		}
		return;
	}
	for (int i=lst; i<=sum; i++){
		record[x]=i;
		dfs(x+1,sum-i,i);
	}	
	record[x]=0;
	return;
}

int main()
{
//    freopen("1.in","r",stdin);
//    freopen("1.txt","w",stdout);
	int T;
	scanf("%d",&T);
	while(T--){
		ans=0;
		scanf("%d%d",&m,&n);
		dfs(1,m,0);
		printf("%d\n",ans);	
	}

return 0;
}


方法二:二维费用背包
因为每个数可以选多次,所以这是一个完全背包
定义状态 f [ i ] [ j ] [ k ] f[i][j][k] f[i][j][k] 表示从前 i i i个数中选,背包容量(数量)为 j j j,体积为 k k k的方案数
不选第 i i i个数: f [ i ] [ j ] [ k ] = f [ i − 1 ] [ j ] [ k ] f[i][j][k] = f[i - 1][j][k] f[i][j][k]=f[i1][j][k]
选第 i i i个数 : f [ i ] [ j ] [ k ] + = f [ i ] [ j − 1 ] [ k − i ] f[i][j][k] += f[i][j - 1][k - i] f[i][j][k]+=f[i][j1][ki]

方法三:动态规划
定义 f [ i ] [ j ] f[i][j] f[i][j]:将 i i i分为 j j j份的方案数
f [ i ] [ j ] = f [ i ] [ j − 1 ] + f [ i − j ] [ j ] f[i][j]=f[i][j-1]+f[i-j][j] f[i][j]=f[i][j1]+f[ij][j]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python的turtle库是一个用于创建简单图形和动画的模块,非常适合初学者学习编程中的绘图概念。如果你想使用turtle库来画出鸣人这个角色,首先你需要知道鸣人的基本特征,比如他的发型、服装等元素。 以下是一个简化的步骤,展示如何用turtle画出鸣人的大致轮廓: 1. 导入turtle模块并设置画笔大小和颜色: ```python import turtle turtle.speed(1) # 设置画笔速度,0最快,1中等,2慢,3最慢 turtle.pencolor('yellow') # 鸣人的头发通常是黄色 ``` 2. 绘制头部(圆形或椭圆): ```python turtle.begin_fill() turtle.circle(30) # 大致的圆形头 turtle.end_fill() ``` 3. 绘制面部特征(两个小圆作为眼睛,一个长形为嘴巴): ```python turtle.penup() turtle.goto(-15, -10) # 移动到合适位置 turtle.pendown() turtle.circle(5) # 左眼 turtle.penup() turtle.goto(-15, 10) # 右眼 turtle.pendown() turtle.circle(5) turtle.penup() turtle.goto(0, 0) # 嘴巴 turtle.pendown() turtle.forward(20) turtle.right(90) turtle.forward(10) turtle.left(90) turtle.forward(20) ``` 4. 绘制身体和衣服: ```python turtle.penup() turtle.goto(-40, 0) # 移动到身体位置 turtle.pendown() turtle.begin_fill() turtle.circle(60) # 身体 turtle.end_fill() turtle.penup() turtle.goto(-70, -20) # 衣服部分 turtle.pendown() turtle.begin_fill() turtle.color('blue', 'white') # 蓝色上衣 turtle.circle(40) # 上衣轮廓 turtle.end_fill() ``` 5. 最后,你可以添加一些细节,如手脚和标志性的螺旋丸符号,但这会更复杂些。 请注意,由于鸣人形象非常细致,用turtle库可能无法精确还原,但以上代码提供了一个基本的绘画框架。如果你需要进一步了解如何改进细节或想要其他相关问题,请告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值