题意:一题街道上很多酒店,交易葡萄酒,正数为卖出葡萄酒,负数为需要葡萄酒,总需求量和总售出量是相等的,从一家店到另外一家店需要路费(路费=距离×运算量),假设每家店线性排列且相邻两店之间距离都是1,求最小路费. 在纸上模拟了一下,你会发现一家店如果卖酒,它的最终流向就是向两边运送:如果买酒,那它就在那边等别家店送酒过来.(我在废话...) 然后第一家店肯定是向右边运酒了,最小的运费当然是卖给右边尽量近的店了,然后第一家店的供求就为0,不需要再考虑了,这样就变成后面几家去买卖的子问题了. 这样是可…
这个题看上去麻烦,实际上只要想清楚就很简单.关键是要有一种等价转换的思维方式.其实题意就是个一排数,最后通过相邻的互相移动加减使得所有数都变成零,移动过程中每次都耗费相应值,让耗费的值最小.虽然从实际看来只能从负的移给正的,但实际结果谁给谁消耗的都一样. 有了这些等价思考,就可以用贪心法做了:第一个数要想变成0,那么必须和第二个数相互移,那么不管谁移给谁,消耗的就是第一个数的绝对值,最后第一个数变0,第二个数变a[1]+a[2]了.这样第2至n个数还是这样的思考方式.这种做法的每一步的消耗都是必…
等价转换思维题 题意: 直线上有n(2<=n<=100000)个等距的村庄  每个村庄要么买酒 要么卖酒  设第i个村庄对酒的需求量为ai  绝对值小于一千  其中ai大于0表示买酒   小于0表示卖酒   所有村庄供需平衡 把k个单位的酒从一个村庄运到相邻的村庄需要k个单位的劳动力   计算最少需要多少劳动力可以满足所有村庄的需要求 这种较大数据求和的题目 sum一定要longlong!!!! #include<bits/stdc++.h> using namespace std…
题意:N个等距村庄,买(>0)卖(<0)酒,供需平衡,运K则需K劳动力.问所需的最小劳动力. 解法:由于运出或运入1的都需经过2,所以无论如何,都可以等价于从2本身运入或运出.因此可以将1和2合并,2一定要运a1(小心:确保 i 的劳动力消耗量是由 i 之前,即 i-1 得到的),记a1+a2为现在自己的所需量.其他同理. 注意--理清关系,算劳动力时要用绝对值. 1 #include<cstdio> 2 #include<cstdlib> 3 #include<…
题意:给出n个等距离的村庄,每个村庄要么买酒,要么卖酒,买酒和卖酒的总量相等, 把k个单位的酒从一个村庄运送到相邻的村庄,需要耗费k个单位劳动力,问怎样运送酒使得耗费的劳动力最少 买     卖          买        卖        买 5      -4          1         -3        1 可以从样例来模拟,第一个村庄需要买5桶酒,这5桶酒都是从右边的别的村庄运过来的,第二个村庄需要卖4桶酒, 那么可以这样想,第一个和第二个村庄捆绑在一起的需求量为 a…
题意:直线上有n(2<=n<=100000)个等距的村庄,每个村庄要么买酒,要么卖酒.设第i个村庄对酒的需求为ai(-1000<=ai<=1000),其中ai>0表示买酒,ai<0表示卖酒.所有村庄供需平衡,即所有ai之和等于0.把k个单位的酒从一个村庄运到相邻村庄需要k个单位的劳动力.计算最少需要多少劳动力可以满足所有村庄的需求. 分析:从最左面的村庄考虑,不管他是买酒还是卖酒,相对于他的相邻村庄都会有a0的运输量,所以运输量不断累加或抵消,一直算到最右边村庄即可.…
As you may know from the comic \Asterix and the Chieftain's Shield", Gergovia consists of one street,and every inhabitant of the city is a wine salesman. You wonder how this economy works? Simpleenough: everyone buys wine from other inhabitants of th…
题目链接: https://vjudge.net/problem/UVA-11054 /* 问题 输入村庄的个数n(2=<n<=100000)和n个村庄的数值,正代表买酒,负代表卖酒,k个单位的酒移动到相邻村需要k个单位的劳动力, 计算并输出至少需要多少个劳动力 解题思路 模拟,每个需要卖酒的村庄,向两边搜索买酒的地方,谁的多或者直接能够满足就移动谁的,直到所有村庄均满足条件. 最坏的情况下,每个村庄都搜索到最远,n*n,可能超时,另外不可行,因为搜索的时候先后的顺序很难确定,需要一个最优值.…
题意: 直线上有n个等距的酒庄,每个酒庄对酒的需求量为ai(正数说明需要买酒,负数需要卖酒),而且保证所有的酒庄供需平衡. 搬运x个单位的酒到相邻的酒庄需要x个劳动力,求要使所有酒庄供需平衡最少需要多少劳动力. 分析: 第一个酒庄要买a1个单位的酒,那么这些酒可能是直接由第二个酒庄生产的,也可能是其他酒庄运到第二个酒庄的. 但最终一定有a1个 劳动力把酒从酒庄2运到酒庄1. 于是,问题就转化为: 有2~n这些酒庄,酒庄2的需求量为a1+a2,其他酒庄的需求量还是ai.且已经使用了|a1|个劳动力…
题目:点击打开题目链接 思路:考虑第一个村庄,如果第一个村庄需要买酒,那么a1>0,那么一定有劳动力从第二个村庄向第一个村庄搬酒,这些酒可能是第二个村庄生产的,也可能是从其他村庄搬过来的,但这一布我们只考虑这一步的劳动力需求.于是,在第二个村庄,我们可以忽略第一个,视为只有编号为2-n的村庄,第二个村庄的需求转化为a1+a2,以此类推 AC代码: #include <iostream> #include <cstdlib> using namespace std; int m…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 考虑第一个店. 如果它要酒的话,只能从第二个店那里运过来. 这样,问题就转化成后n-1个店的问题了. 然后会发现,第二家店它的情况也是同样的. 即a[2] = a[1]+a[2]; 然后做相同的事情.a[2]的需求量只能从第3家店运过来(送过去). 每一段路的花费就是∑ai的绝对值. [代码] /* 1.Shoud it use long long ? 2.Have you ever test several sample(at…
这道题用到了等价转换的思想 所有要运到a1的酒, 都要经过a2, 所以不如把a2的值改成a1+a2,然后依次以此类推. #include<cstdio> #include<cmath> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace std; int main() { int n; while(~scanf("%d", &n) && n) { l…
POJ3617 Best Cow Line 题意 给定长度为N的字符串S,要构造一个长度为N的字符串T.起初,T是一个空串,随后反复进行下列任意操作: 从S的头部(或尾部)删除一个字符,加到T的尾部 目标是构造字典序尽可能小的字符串T. 思路 贪心算法,不断取S的开头和末尾中较小的一个字符放到T的末尾.但对于S的开头和末尾字符相同的情况下,需要比较下一个字符大小,这可以用如下算法实现: 按照字典序比较S和S翻转后的字符串S1,如果S较小,则从S的开头取,否则从末尾取. 代码 Source Cod…
贪心算法的基本步骤: 1.从问题的某个初始解出发.2.采用循环语句,当可以向求解目标前进一步时,就根据局部最优策略,得到一个部分解,缩小问题的范围或规模.3.将所有部分解综合起来,得到问题的最终解. HDU2037: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2037 题解: 贪心算法:在对问题求解时,总是作出在当前看来是最好的选择.也就是说,不从整体上加以考虑,它所作出的仅仅是在某种意义上的局部最优解(是否是全局最优,需要证明).若要用贪心算法求…
杭电OJ1789http://acm.hdu.edu.cn/showproblem.php?pid=1789 南阳OJ236http://59.69.128.203/JudgeOnline/problem.php?pid=236 1.最简单的贪心法是只有一个东西需要考虑(如安排会场,只需要将   "时间"  进行排序), 即使需要考虑两个,也有一个明显的先后顺序(比如应先考虑开头时间,开头一样的,再找结束时间早的) 2.而稍难的问题如这两个题目的贪心法则是建立在两个处于平行地位的东西上…
NP问题(Non-deterministic Polynomial ):多项式复杂程度的非确定性问题,这些问题无法根据公式直接地计算出来.比如,找大质数的问题(有没有一个公式,你一套公式,就可以一步步推算出来,下一个质数应该是多少呢?这样的公式是没有的):再比如,大的合数分解质因数的问题(有没有一个公式,把合数代进去,就直接可以算出,它的因子各自是多少?也没有这样的公式). NPC问题(Non-deterministic Polynomial complete):NP完全问题,可以这么认为,这种…
POJ2376 Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14585   Accepted: 3718 Description Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some cleaning chores around the barn. He always wants to hav…
  # 贪心算法求解货币兑换问题 # 货币系统有 n 种硬币,面值为 v1,v2,v3...vn,其中 v1=1,使用总值money与之兑换,求如何使硬币的数目最少,即 x1,x2,x3...xn 之和最小 # 输入:各种货币的面值 v1,v2,v3...vn:要兑换的总值 money # 输出:兑换得到最少的货币数量   1 # 修改面额 2 v = [50,10,5,2,1] 3 # 修改要兑换的货币量money 4 money = 253 5 # 每种货币初始数量为 0 6 x = [0]…
https://vjudge.net/problem/UVA-11054 As you may know from the comic “Asterix and the Chieftain’s Shield”, Gergovia consists of one street, and every inhabitant of the city is a wine salesman. You wonder how this economy works? Simple enough: everyone…
在一条街上有许多房屋,每间屋子里都住着人,并且都是做葡萄酒生意的商人,他们每天都要决定买卖多少瓶葡萄酒.有趣的地方是,供需总是完美地一致.商人总是能买到自己需要的葡萄酒,并且,他们从来不介意是从哪个商人那里购入的,只要求葡萄酒的搬运时间越少越好.如果把一瓶葡萄酒搬运到隔壁的成本是1,请求出全部葡萄酒买卖的最低搬运成本. 2. 输入和输出 输入数据由多行构成,每两行是一组测试数据.第一行是整条街上的店铺数n(2-100 000),第二行是n个整数,代表每间店面希望买卖的葡萄酒瓶数(?1 000-1…
0. min 与 max 的转换 {max(X,Y)=X+Y−min(X,Y)min(X,Y)=X+Y−max(X,Y)min(X,Y)+max(X,Y)=X+Y" role="presentation">⎧⎩⎨⎪⎪max(X,Y)=X+Y−min(X,Y)min(X,Y)=X+Y−max(X,Y)min(X,Y)+max(X,Y)=X+Y{max(X,Y)=X+Y−min(X,Y)min(X,Y)=X+Y−max(X,Y)min(X,Y)+max(X,Y)=X+Y 1…
题意:给出只包含数字和+*的表达式,你可以自己安排每一个运算的顺序,让你找出表达式可能得到的最大值和最小值. 很明显,先乘后加是最小值,先加后乘能得到最大值. 其实不是很明显... 证明下: 数字的范围是大于等于1的,所以a+b*c如果先考虑加法就变成(a+b)*c,变换下就是ac+bc,而先考虑乘法的话就是a+bc,由于c是大于等于1的,所以ac+bc>=a+bc,先考虑加法结果会不小于先考虑乘法. 根据这个思想,先乘后加是最小值,先加后乘能得到最大值. 代码: /* * Author: il…
题意:有两个长度为n的排列p和s.要求通过交换使得p变成s.交换 pi 和 pj 的代价是|i-j|.要求使用最少的代价让p变成s. 考虑两个数字pi和pj,假如交换他们能使得pi到目标的距离减少,pj到目标的距离减少.那么应该交换他们,这是一个必要的操作,也是答案的下界. 如果每一次都能找到这样的两个数字,那么答案就是排列p中的每个数字在排列s的位置的距离差之和/2.这显然是答案的下界. 现在考虑证明这个下界是可以构造出来的. 考虑排列p中最后一个位置不对的数字,不妨设为pj,他的目标位置是p…
开门人和关门人 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 12319    Accepted Submission(s): 6237 Problem Description 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签  到.签离记录.请依据记录找出当天开门和关门的人.    Input 測试输…
大致题意: 直线上有n个村庄,要么买酒要么卖酒,运酒到隔壁村庄需要这个酒的权值个劳动力 问你至少需要多少劳动力 题目保证了所有权值和为0!!!!!!!!!!!!这个意义重大,表示这是一个封闭的群体 这是一个隐藏条件,他表明只要前i个村子不能自卖自买,那么一定会出口或者进口的 最少需要多少,这题显然是一个最优策略了 然后好好想想,有点状态转移的味道 前i个区间需要多少个区间,现在多出来第i+1个村,那么这个就和钱i个村子的总需求(可以为负)有关,若总需求a为正数,则一定会有a个劳动力消耗在了i到i…
Problem Description In a factory, there are N workers to finish two types of tasks (A and B). Each type has N tasks. Each task of type A needs xi time to finish, and each task of type B needs yj time to finish, now, you, as the boss of the factory, n…
题目描述: 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异. 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列.格雷编码序列必须以 0 开头. 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/gray-code 解题思路: 当n=1时:0,1 当n=2时,仅需对n=1的所有结果最高位添加1&&&并且逆序添加 0,1 10,11->逆序  11,10 最终结果0,1,11,10: publ…
此题的策略是选取可用范围最右边的点,一般来说该点辐射两边,左侧辐射,右侧辐射,所以用两个循环,第一个循环找出该点,第二个循环求出最右边的点 源代码: #include<iostream>#include<algorithm>using namespace std;#define maxn 1100int main(){    int r,n,k=0,num=0,x,a[maxn];    cin>>n;    for(int i=0;i<n;i++) cin>…
容错声明: ①题目选自https://acm.ecnu.edu.cn/,不再检查题目删改情况 ②所有代码仅代表个人AC提交,不保证解法无误 E0001  A+B Problem First AC: 2017-10-13       Latest Modification: 2018-02-28 #include<bits/stdc++.h> using namespace std; int a,b; int main() { cin>>a>>b; cout<<…
杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDIATE DECODABILITY…