洛谷P1080国王游戏题解--zhengjun

题面传送门

思路

一看,高精度,参见高精度模板–zhengjun,这个模板十分好用(直接粘贴就可以了)。(代码中就不显示了)

然后,如果是这样的排列:

之前的 a a a乘积为 t t t ⋯ \cdots
k k k a 0 , b 0 a_0,b_0 a0,b0
k + 1 k+1 k+1 a 1 . b 1 a_1.b_1 a1.b1
那么,如果这样排,这两行的答案就分别是 a n s 1 = max ⁡ ( t ÷ b 0 , t × a 0 ÷ b 1 ) ans_1=\max(t\div b_0,t\times a_0\div b_1) ans1=max(t÷b0,t×a0÷b1)
如果倒着排,就是 a n s 2 = max ⁡ ( t ÷ b 1 , t × a 1 ÷ b 0 ) ans_2=\max(t\div b_1,t\times a_1\div b_0) ans2=max(t÷b1,t×a1÷b0)

如果 a n s 1 < a n s 2 ans_1<ans_2 ans1<ans2 max ⁡ ( t ÷ b 0 , t × a 0 ÷ b 1 ) < max ⁡ ( t ÷ b 1 , t × a 1 ÷ b 0 ) \max(t\div b_0,t\times a_0\div b_1)<\max(t\div b_1,t\times a_1\div b_0) max(t÷b0,t×a0÷b1)<max(t÷b1,t×a1÷b0)

转换一下 max ⁡ ( k 0 , k 1 ) < max ⁡ ( k 2 , k 3 ) \max(k_0,k_1)<\max(k_2,k_3) max(k0,k1)<max(k2,k3)

因为 t × a 0 ÷ b 1 > t ÷ b 1 t\times a_0\div b_1>t\div b_1 t×a0÷b1>t÷b1 k 1 > k 2 k_1>k_2 k1>k2,而和对应的取一个 max ⁡ \max max就反过来了,所以 k 0 , k 1 , k 2 < k 3 k_0,k_1,k_2<k_3 k0,k1,k2<k3,所以 k 1 < k 3 k_1<k_3 k1<k3,也就是 t × a 0 ÷ b 1 < t × a 1 ÷ b 0 t\times a_0\div b_1<t\times a_1\div b_0 t×a0÷b1<t×a1÷b0,所以 a 0 × b 0 < a 1 × b 1 a_0\times b_0<a_1\times b_1 a0×b0<a1×b1,所以,如果这两个乘积谁大,谁放后面就会是答案小一点。

那么只要用乘积拍个序,然后就是高精度模拟。

代码

#include<bits/stdc++.h>
using namespace std;
/*
高精度模板 
*/
int n;
struct zj{
	int a,b;
	bool operator < (const zj &x)const{
		return a*b<x.a*x.b;
	}
}a[1001];
bign pre,ans;
int main() {
	scanf("%d",&n);
	for(int i=0;i<=n;i++)scanf("%d%d",&a[i].a,&a[i].b);
	sort(a+1,a+1+n);
	ans=0;
	pre=1;
	for(int i=1;i<=n;i++){
		pre*=a[i-1].a;
		ans=max(ans,pre/a[i].b);
	}
	cout<<ans;
	return 0;
}

谢谢–zhengjun

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可 6私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。
过河卒是一个典型的动态规划问题。首先,我们将整个棋盘看作一个二维数组,数组的每个元素表示到达该位置的路径数目。然后,我们根据题目给出的条件,逐步更新数组中的元素,直到计算出到达目标位置的路径数目。 具体的解题思路如下: 1. 首先,我们可以将马的位置设置为0,表示无法经过该位置。 2. 然后,我们根据马的位置,更新数组中的元素。对于二维数组中的每个位置,我们根据左边和上边的位置来计算到达当前位置的路径数目。具体地,如果左边和上边的位置都可以经过,那么到达当前位置的路径数目就等于左边和上边位置的路径数目之和。如果左边或上边的位置无法经过,那么到达当前位置的路径数目就等于左边或上边位置的路径数目。 3. 最后,我们输出目标位置的路径数目。 下面是洛谷p1002过河卒题解的C++代码: ```cpp #include <bits/stdc++.h> using namespace std; int main() { long long a[21][21]; int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; // 初始化数组,马的位置设置为0 for(int i=0; i<=20; i++) { for(int k=0; k<=20; k++) { a[i][k] = 1; } } a[x2][y2] = 0; // 根据马的位置更新数组中的元素 if(x2 >= 2 && y2 >= 1) a[x2-2][y2-1] = 0; if(x2 >= 1 && y2 >= 2) a[x2-1][y2-2] = 0; if(x2 <= 18 && y2 >= 1) a[x2+2][y2-1] = 0; if(x2 <= 19 && y2 >= 2) a[x2+1][y2-2] = 0; if(x2 >= 2) a[x2-2][y2+1] = 0; if(x2 >= 1) a[x2-1][y2+2] = 0; if(y2 >= 1) a[x2+2][y2-1] = 0; if(y2 >= 2) a[x2+1][y2-2] = 0; // 动态规划计算路径数目 for(int i=1; i<=20; i++) { for(int k=1; k<=20; k++) { if(a[i][k] != 0) { a[i][k] = a[i-1][k] + a[i][k-1]; } } } // 输出目标位置的路径数目 cout << a[x1][y1] << endl; return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A_zjzj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值