UVA 1614 - Hell on the Markets】的更多相关文章

题意: 输入n个数,第i个数ai满足1≤ai≤i.对每个数添加符号,使和值为0. 分析: 排序后从最大的元素(假设为k)开始,凑出sum/2即可.用去掉了k的集合,一定可以凑出sum/2 - a[k].只要sum是偶数,就一定会有解. 代码: #include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std; const int maxn…
题意:给定一个长度为 n 的序列,满足 1 <= ai <= i,要求确实每一个的符号,使得它们和为0. 析:首先这一个贪心的题目,再首先不是我想出来的,是我猜的,但并不知道为什么,然后在网上搜了一下题解,是什么数学归纳法...... 贪心策略:1~i的和或者部分和一定能凑出来1~sum[i]. 利用这个策略,也就是说,只要最后和是偶数,那么就一定有解,那这个解怎么求呢??我们先把所有的数从大到小排序,然后逆向计算,如果前 i-1 项和大于0, 那么就减掉第 i 项,否则就加上第 i 项,这样…
先证明一个结论吧,对于1≤ai≤i+1,前面ai个数一定可以凑出1~sum[i]中的任意一个数. 对于i=1显然成立, 假设对于i=k结论成立,那么对于i=k+1来说,只要证明sum[k]+i,1≤i≤ak+1可以凑出来就行了. 因为sum[k]+i≥k+1,且1≤ak+1≤k+1,所以可以先选一个ak+1,剩下的0≤sum[k]+i-ak+1≤sum[k]一定是可以由前面的数字凑出来的. 这就证明了贪心的正确性. #include<bits/stdc++.h> using namespace…
题意:输入一个长度为n(n<=100000)的序列a,满足1<=ai<=i,要求确定每个数的正负号,使得所有数的总和为0. 分析: 1.若总和为0,则未加符号之前,所有数之和必为偶数. 2.现在考虑是否有一部分数的和能等于sum/2. 方法:cnt[i]为数字i的个数,(当前的sum)/i为需要凑出当前的sum需要有多少个整数i,两者的最小值就是实际用的i的个数,即use[i].(use[i]为0的情况:1.枚举过程中,不存在i这个数.2.i大于当前的sum,所以凑出sum/2不能使用i…
uva 1614奇怪的股市(归纳法证明,贪心) 输入一个长度为n的序列a,满足\(1\le a_i\le i\),要求确定每个数的正负号,使得所有数的总和为0.例如a={1, 2, 3, 4},则4个数的符号分别是1, -1, -1, 1即可.但若a={1, 2, 3, 3},则无解.n<=1e5. 这道题相当于要找到两堆相等的数.若序列中数的总和为奇数,那么拆出来的两堆数无论如何都不可能相等,所以无解.由于这道题的特殊性质,可用归纳法证明总和为偶数时一定有解. 现在要证明,用前i个数的全部或部…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 证明:前i个数一定能凑够1..sum[i]中的所有数字 i=1时显然成立. 现在假设i>=2时结论成立 即前i个数字能凑出1..sum[i] 令k=i+1; 现在证明前i+1个数字能凑出1..sum[i+1] 即用前i个数字和数字a[i+1]凑出1..sum[i+1] 现在我们把i+1个数字全都用上. 得到sum[i+1] 现在我们要再得到sum[i]+1,sum[i]+2..sum[i+1]-1 那么我们只要用sum[i+1]…
题意:有一个长度为N的序列A,满足1≤Ai≤i,每个数的正负号不知.请输出一种正负号的情况,使得所有数的和为0.(N≤100000) 解法:(我本来只想静静地继续做一个口胡选手...←_← 但是因为这题的贪心实在是太厉害了!我就单看,就盯了题解半小时以上...而代码又那么短,我就打了代码了...其实我又不太理解为什么一定要排序.) 贪心部分的理论依据:前i个数可以凑出1-sum[i]的所有整数. 证明:第二类数学归纳,n=1时成立,假设n=k之前所有项都成立,当n=k+1时.sum[k+1]=s…
Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description   Most financial institutions had become insolvent during financial crisis and went bankrupt or were bought by larger institutions, usually by banks.…
https://vjudge.net/problem/UVA-1614 题意:输入一个长度为n的序列a,满足1<=ai<=i,要求确定每个数的正负号,使得所有数的总和为0. 思路:贪心部分的理论依据:前i个数可以凑出1-sum[i]的所有整数. 数学归纳,n=1时成立,假设n=k之前所有项都成立,当n=k+1时.sum[k+1]=sum[k]+a[k+1].        只需证明能凑出sum[k]+1~sum[k+1]间的整数即可.设1≤p≤a[k+1],sum[k]+p=sum[k]+a[…
这道题我苦思冥想了一个小时, 想用背包来揍sum/2, 然后发现数据太大, 空间存不下. 然后我最后还是去看了别人的博客, 发现竟然有个神奇的结论-- 幸好我没再钻研, 感觉这个结论我肯定是想不到的-- 结论是:在1 <= a[i] <= i时, 前i个数一定可以凑出1~sum[i]的所有整数 证明看这 https://blog.csdn.net/wcr1996/article/details/43957461 其他博客写有了这个结论, 就排序一下, 从大到小, 凑sum/2, 能凑就凑, 最…