XYOJ1257: 捕杀恶龙(break+j=k)

题目描述

动物园有一条n个头的恶龙,你希望雇佣一些骑士把它杀死(也就是砍掉所有的头)。现在有m个骑士可以雇佣,一个能力值为 x 的骑士可以砍掉恶龙一个直径不超过 x 的头,且需要支付 x 个金币。如何雇佣骑士才能砍掉恶龙所有的头,并且支付最小的金币?(注意:一个骑士只能砍一个头并且仅能被雇佣1次。

输入

输入多组数据,第一行二个整数n、m,(1<=n,m<=20000);以下n行每行为一个整数,即恶龙每个头的直径,以下m行为一个整数,即每个骑士的能力。输入结束标志为n=m=0.

输出

对于每组数据,输出最少花费。如果无解,输出:“Loowater is doomed!”

提示:因为要保证用的钱最少,所以先把骑士按照能力值从小到大进行排序。然后从最小的开始一个一个进行匹配。

样例输入

2 3
5
4
7
8
4
2 1
5
5
10
0 0

样例输出

11
Loowater is doomed!

#include<stdio.h>
#include<algorithm>
using namespace std;

int main() {
	int n,m;
	while(~scanf("%d %d",&n,&m)&&n&&m) {
		int a[20001],b[20001];
		for(int i=0; i<n; i++) {
			scanf("%d",&a[i]);
		}
		for(int j=0; j<m; j++) {
			scanf("%d",&b[j]);
		}
		sort(b,b+m);
		sort(a,a+n);
		int sum=0,k=0,num=0;
		if(n>m) {
			printf("Loowater is doomed!\n");
		} else {//核心~ 
			for(int i=0; i<n; i++) {
				for(int j=k; j<m; j++) {//k
					if(b[j]>=a[i]) {
						sum+=b[j];
					    num++;//计算除去的恶龙 
						k=j+1;//从已经用掉的骑士的下一个开始算起 
						break;//跳出第二个循环
					} //在这写else printf("Loowater is doomed!\n");是错误的!!!!可以通过杀死恶龙个数和原来恶龙的个数进行比较!
				}
			}
			if(num==n){
			printf("%d\n",sum);
			}
			else{
			printf("Loowater is doomed!\n");				
			}
		}

	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lotka-Volterra模型是一种用于描述生态系统中捕食者和猎物之间相互作用的数学模型。在本文中,我们将使用Python实现三种不同类型的Lotka-Volterra模型。 第一种模型:基本的Lotka-Volterra模型 基本的Lotka-Volterra模型是最简单的一种,它假设猎物种群的增长率只与自身有关,而捕食者种群的增长率只与猎物种群有关。它的数学表达式如下: $\frac{dx}{dt}= ax - bxy$ $\frac{dy}{dt}= -cy + dxy$ 其中,x和y分别表示猎物和捕食者的种群密度,a、b、c和d是常数,分别表示猎物自然增长率、猎物被捕杀的比例、捕食者自然死亡率和捕食者每吃掉一只猎物增加的生殖率。 我们可以使用Python的scipy库中的odeint函数来求解这个模型。代码如下: ```python import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt # 定义Lotka-Volterra模型的函数 def LV_model(y, t, a, b, c, d): x, y = y dxdt = a*x - b*x*y dydt = -c*y + d*x*y return [dxdt, dydt] # 定义模型参数 a = 1.5 b = 1 c = 3 d = 1 # 定义初始值和时间点 y0 = [10, 5] t = np.linspace(0, 30, 1000) # 使用odeint函数求解模型 sol = odeint(LV_model, y0, t, args=(a, b, c, d)) # 绘制模型结果 plt.plot(t, sol[:, 0], label='Prey') plt.plot(t, sol[:, 1], label='Predator') plt.xlabel('Time') plt.ylabel('Population density') plt.legend() plt.show() ``` 运行结果: ![basic_lv_model.png](attachment:basic_lv_model.png) 第二种模型:加入稳定性的Lotka-Volterra模型 在基本的Lotka-Volterra模型中,猎物和捕食者的种群密度会不断波动,而且会出现周期性的极值。这与真实的生态系统有所不同,因为在现实中,生态系统中的种群数量通常是稳定的。 为了更好地模拟真实的生态系统,我们可以将模型中的一些参数变为稳定的。例如,我们可以将猎物种群的自然增长率和捕食者种群的自然死亡率设置为常数,这样就可以保证猎物和捕食者的种群密度始终在某个稳定的水平上波动。 加入稳定性后的Lotka-Volterra模型的数学表达式如下: $\frac{dx}{dt}= ax(1 - \frac{x}{k}) - bxy$ $\frac{dy}{dt}= -cy + dxy$ 其中,k是一个常数,表示猎物种群的最大容纳量。 我们可以使用与基本的Lotka-Volterra模型相同的方法来求解这个模型。代码如下: ```python import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt # 定义Lotka-Volterra模型的函数 def LV_model(y, t, a, b, c, d, k): x, y = y dxdt = a*x*(1 - x/k) - b*x*y dydt = -c*y + d*x*y return [dxdt, dydt] # 定义模型参数 a = 1 b = 0.1 c = 1.5 d = 0.075 k = 50 # 定义初始值和时间点 y0 = [10, 5] t = np.linspace(0, 300, 1000) # 使用odeint函数求解模型 sol = odeint(LV_model, y0, t, args=(a, b, c, d, k)) # 绘制模型结果 plt.plot(t, sol[:, 0], label='Prey') plt.plot(t, sol[:, 1], label='Predator') plt.xlabel('Time') plt.ylabel('Population density') plt.legend() plt.show() ``` 运行结果: ![stable_lv_model.png](attachment:stable_lv_model.png) 第三种模型:加入多个捕食者的Lotka-Volterra模型 在真实的生态系统中,猎物种群通常会同时受到多个捕食者的威胁。因此,为了更好地模拟真实的生态系统,我们可以将模型中的一个捕食者扩展成多个捕食者。 加入多个捕食者后的Lotka-Volterra模型的数学表达式如下: $\frac{dx}{dt}= ax - \sum_{i=1}^{n}b_ixy_i$ $\frac{dy_i}{dt}= -c_iy_i + e_ixy_i$ 其中,n是捕食者的数量,$b_i$表示第i个捕食者对猎物种群的影响,$c_i$表示第i个捕食者的自然死亡率,$e_i$表示每个捕食者每吃掉一只猎物增加的生殖率。 我们可以使用与基本的Lotka-Volterra模型相同的方法来求解这个模型。代码如下: ```python import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt # 定义Lotka-Volterra模型的函数 def LV_model(y, t, a, b, c, e): x = y[0] y = y[1:] dxdt = a*x - np.sum(b*x*y) dydt = [] for i in range(len(y)): dydt.append(-c[i]*y[i] + e[i]*x*y[i]) return [dxdt] + dydt # 定义模型参数 a = 1 b = [0.1, 0.2] c = [1.5, 1] e = [0.05, 0.1] # 定义初始值和时间点 y0 = [10] + [5]*len(b) t = np.linspace(0, 30, 1000) # 使用odeint函数求解模型 sol = odeint(LV_model, y0, t, args=(a, b, c, e)) # 绘制模型结果 plt.plot(t, sol[:, 0], label='Prey') for i in range(len(b)): plt.plot(t, sol[:, i+1], label=f'Predator {i+1}') plt.xlabel('Time') plt.ylabel('Population density') plt.legend() plt.show() ``` 运行结果: ![multi_lv_model.png](attachment:multi_lv_model.png) 以上是三种不同类型的Lotka-Volterra模型的Python实现。这些模型可以帮助我们更好地理解生态系统中猎物和捕食者之间相互作用的规律。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值