Mancunian Hoards Black Money,贪心,思维

这篇具有很好参考价值的文章主要介绍了Mancunian Hoards Black Money,贪心,思维。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 Mancunian Hoards Black Money - Problems - CodeChef

Mancunian is a real estate dealer in Mancunia. He is part of The Elite Builders Society who work hard day and night to improve the infrastructure of thecity, but they need cash to do this. They have a unique way to increase the amount of black money they possess. They start with a pile of cash amounting to S dollars. Then they repeat the following process N times. Before the ith step, there are already i piles of cash on the table. They create another pile amounting to the sum of amounts of all the i previous piles and add another Ci dollars to it.

A hot piece of property priced at X dollars has just appeared on the market and the society decided that they must buy it at all costs. They need to select a few of the piles from the ones on the table, whose sum is exactly X.

Although shrewd businessmen, they lack mathematical skills. Can you help them decide whether it is possible or not?

Input

The first line of the file contains an integer T denoting the number of test cases.

Each case consists of two lines.

The first line contains three integers SN and X denoting the amount of cash in the first pile, the number of times the society creates a new pile and the cost of the in-demand property respectively.

The second line contains N integers denoting the values Ci mentioned in the problem description.

Output

Output T lines. In each line, output "yes" if the society can buy the property and "no" otherwise.

Constraints

  • 1 ≤ T, N ≤ 105
  • 1 ≤ sum of N over all test cases ≤ 105
  • 1 ≤ S, X, Ci ≤ 1018

Example

Input:
2
1 4 6
1 2 4 2
100 2 500
51 749

Output:
yes
no

Explanation

Example case 1: The piles of cash are 12512 and 22. The society will use the piles of cash amounting to 1 and 5 to get a total of 6.

Example case 2: The piles of cash are 100151 and 1000. The society cannot buy the property costing 500 using any of the piles of cash they have.

解析:

贪心;
我们需要根据题目所给的 S 和 c[i] 推出每堆 cash 的值 a[i] ,在此过程中我们还会推出 a[i] 的前缀和数组 sum[[i];
通过观察我们发现如果 X > sum[i] 那么 X 一定加数中一定有 a[i+1];
因为:

sum[i+1]>X>sum[i],如果没有 a[i+1],那么 sum[i] 中一定没有能够凑到 X 的数,且通过a序列的生成方式我们知道 a[i+2] 一定大于 sum[i] ,所以当 sum[i+1]>X ,X 的加数中一定不可能存在 a[i+1] 后的数。

让我们举一个例子。对于给定的${C_i} 值,设级数为${1,3,6,15,30,70}$。让我们看看值为30的桩。在此之前的所有桩的总和为1+3+6+15=25,小于30。
现在,如果$X$的值在(30,70)范围内,你会怎么做?注意,如果我们去掉堆30,我们就不能形成30到70之间的任何值。如果我们排除桩30,则桩30之前的桩不能用于形成桩30和70之间的值。这是因为即使包括30之前的所有桩,我们也无法形成超过30的值。我们完全依赖于桩30来形成30-70之间的值。
 文章来源地址https://www.toymoban.com/news/detail-723864.html

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
using namespace std;
typedef long long LL;
const int N = 1e5 + 5;
LL S ,n,X;
LL c[N],a[N], sum[N];


int main() {
	int T;
	cin >> T;
	while (T--) {
		scanf("%lld%lld%lld", &S, &n, &X);
		for (int i = 1; i <= n; i++) {
			scanf("%lld", &c[i]);
		}
		a[1] = S;
		sum[1] = S;
		int cnt = 1;
		for (int i = 2; i <= n+1; i++) {
			if (sum[i - 1] + c[i - 1] > 1e18)
				break;
			a[i] = sum[i - 1] + c[i - 1];
			sum[i] = sum[i - 1] + a[i];
			cnt++;
		}
		for (int i = cnt; i >= 0; i--) {
			if (X>sum[i]) {
				X -= a[i+1];
			}
		}
		if (X == 0)
			cout << "yes" << endl;
		else
			cout << "no" << endl;
	}
	return 0;
}

到了这里,关于Mancunian Hoards Black Money,贪心,思维的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【算法思维】-- KMP算法

    OJ须知: 一般而言,OJ在1s内能接受的算法时间复杂度:10e8 ~ 10e9之间(中值5*10e8)。在竞赛中, 一般认为计算机1秒能执行 5*10e8 次计算 。 时间复杂度 取值范围 o(log2n) 大的离谱 O(n) 10e8 O(nlog(n)) 10e6 O(nsqrt(n))) 10e5 O(n^2) 5000 O(n^3) 300 O(2^n) 25 O(3^n) 15 O(n!) 11 时间复杂度排序: o(1)

    2024年02月06日
    浏览(48)
  • 【算法思维】-- 动态规划

    OJ须知: 一般而言,OJ在1s内能接受的算法时间复杂度:10e8 ~ 10e9之间 (中值5*10e8) 。在竞赛中, 一般认为计算机1秒能执行 5*10e8 次计算 。 时间复杂度 取值范围 o(log2n) 大的离谱 O(n) 10e8 O(nlog(n)) 10e6 O(nsqrt(n))) 10e5 O(n^2) 5000 O(n^3) 300 O(2^n) 25 O(3^n) 15 O(n!) 11 时间复杂度排序: o(1

    2024年02月05日
    浏览(38)
  • 【算法思维】-- 动态规划(C++)

    OJ须知: 一般而言,OJ在1s内能接受的算法时间复杂度:10e8 ~ 10e9之间 (中值5*10e8) 。在竞赛中, 一般认为计算机1秒能执行 5*10e8 次计算 。 时间复杂度 取值范围 o(log2n) 大的离谱 O(n) 10e8 O(nlog(n)) 10e6 O(nsqrt(n))) 10e5 O(n^2) 5000 O(n^3) 300 O(2^n) 25 O(3^n) 15 O(n!) 11 时间复杂度排序: o(1

    2024年02月02日
    浏览(50)
  • 算法思维/优化

    目录 搜索 深度优先搜索 题目来源:小木棍 广度优先搜索 题目来源:棋盘 题目来源:引水入城 双向搜索/折半搜索 题目来源:世界冰球锦标赛 题目来源:Balanced Cow Subsets G A*/迭代加深搜索/IDA* 题目来源:八数码难题 逆序对 题目来源:逆序对[模板] 题目来源:火柴排队 倍增

    2024年02月19日
    浏览(69)
  • 算法小课堂(五)贪心算法

    贪心算法是一种常见的算法思想,用于解决优化问题。其基本思想是在每一步选择中都采取当前状态下最优的选择,从而希望能够获得全局最优解。 具体来说,贪心算法通常分为以下步骤: 定义问题的最优解,通常需要将问题转化为求最大值或最小值; 选择一个局部最优解

    2024年02月02日
    浏览(43)
  • 【算法】—贪心算法详解

    ①贪心算法的概念 : 贪心算法就是不断选择 在当前看来最好的选择,也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择 虽然贪心算法不能对所有问题都得到整体最优解,但在一些情况下,即使贪心算法 不一定能得到整体最优解 ,其

    2024年02月04日
    浏览(45)
  • 贪心算法part03算法

    ● 1005.K次取反后最大化的数组和 ● 134. 加油站 ● 135. 分发糖果 https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/description/ https://leetcode.cn/problems/gas-station/description/ https://leetcode.cn/problems/candy/description/

    2024年01月18日
    浏览(48)
  • 贪心算法(贪婪算法)

    贪心算法(贪婪算法) 贪心算法思想 ​ 1.贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说, 不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解 。 ​ 2.贪心选择是指所求问题的 整体最优解可以通过一系列局部

    2024年02月03日
    浏览(47)
  • 算法设计方法之贪心算法

    贪心算法是算法设计的一种方法。期盼通过每个阶段的局部最优选择,从而达到全局的最优。但结果不一定是最优的。 场景一 零钱兑换 现有硬币 1 元、2 元、5 元,需要用最少的硬币数量凑够 11 元。 利用贪心算法实现,优先考虑最好的结果就是面值为 5 元的硬币,11 = 5 +

    2024年02月17日
    浏览(46)
  • 【算法】贪心算法练习一

    个人主页 : zxctscl 如有转载请先通知 一、贪心策略:解决问题的策略,局部最优-全局最优 把解决问题的过程分为若干步; 解决每一步的时候,都选择当前看起来“最优的”解法; 希望得到全局最优。 二、贪心策略的正确性 因为有可能“贪心策略”是一个错误的方法 正确

    2024年04月25日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包