SGU - 186 - The Chain (贪心)】的更多相关文章

186. The Chain time limit per test: 0.25 sec. memory limit per test: 4096 KB input: standard input output: standard output Smith has N chains. Each chain is the sequence of successively connected links. The length of each chain is known: the first ch…
看懂题就是水题... code #include <iostream> #include <algorithm> using namespace std; int a[110], n, l, r, ans; int main() { cin >> n; for (int i = 0; i < n; i++) cin >> a[i]; r = n - 1; sort (a, a + n); while (l < r) { a[l]--, r--;…
总是拆最短的链子  连接长的链子   贪心.... #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; int a[110]; int main() { int n; scanf("%d",&n); for(int i = 0; i < n; i++) scanf("%d&qu…
http://acm.sgu.ru/problemset.php?contest=0&volume=1 101 Domino 欧拉路 102 Coprime 枚举/数学方法 103 Traffic Lights 最短路 104 Little Shop of Flowers 动态规划 105 Div 3 找规律 106 The Equation 扩展欧几里德 107 987654321 Problem 找规律 108 Self-numbers II 枚举+筛法递推 109 Magic of Dav…
#include<bits/stdc++.h> #define de(x) cout<<#x<<"="<<x<<endl; #define dd(x) cout<<#x<<"="<<x<<" "; #define rep(i,a,b) for(int i=a;i<(b);++i) #define repd(i,a,b) for(int…
题目   SGU 171 相当好的贪心的题目!!!!! 题目意思就是说有K个赛区招收参赛队员,每个地区招收N[i]个,然后每个地区都有一个Q值,而N[i]的和就是N,表示总有N个参赛队员,每个队员都有他自己的P值,和他的权值W,只有当一个队员的P大于某一个地区的Q值时,权值W才能被记录在内,问怎样让着N个参赛队员选择地区才能让权值和最大. 贪心的思路就是按照权值W贪心 1.先按W的降序排序,优先考虑权值交大的. 2.歪了不影响后面的参赛队员,W较大的而且满足P>Q的,让其参加p>Q时Q最大的那…
SGU 280.Trade centers 解题报告 题意: n(<=30000)个城市,(n-1)条道路,求最少需要选择多少个城市建造市场,使得所有城市到任意一个市场的距离不大于k. Solution: 比较好的贪心题.实现起来也有一定技巧. 先以任意点为根,构造出一颗有根树. 首先比较容易想到的是从叶子节点向上寻找,如果只有一个距离为k的点,就把它选上.但是有多个呢? 于是思考更一般的做法,由于是树形结构,先考虑以x节点为根的子树.我们先假设f[x]代表离x节点向下的市场点的距离,这个值可以…
链接: http://acm.sgu.ru/problem.php?contest=0&problem=195 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26733#problem/E 195. New Year Bonus Grant time limit per test: 1.5 sec. memory limit per test: 65536 KB input: standard output: standard All…
codeforce447 D - DZY Loves Modification 题意:有一个n*m的矩阵,每次可以选择一行或者一列,可以得到这行或这列的所有元素sum的积分,然后使这一列/行的每一个元素都减少p,接着再选择一行或一列,共操作k次,n,m<=1000,k<=1000000求最多能得到多少积分 思路:每次选择sum最大的行或者列,但是时间复杂度太大,过不去~若选择一行,则每个列的sum一定减少p,同理:若选择的行数和列数确定下来了,选择i行,k-i列,那么行和列之间谁选选择就没有影…
题意: 给出长度为n(<=1000)的一个数.输出删掉k个数字后的最大值. Solution: 简单贪心. s[i]代表数字s的第i位. 从前往后第一个满足s[i]>s[i-1]的位置,最优一定是删除s[i-1]的.累计次数t. 同时对新得到的数同样处理,这里可以只用一个循环.如果用c++ string的话更加方便. 一直处理到t==k,或者没有满足条件的位置. 如果最后删除的次数t<k,只要从最后删掉k-t个数字. 时间复杂度O(n) #include <iostream>…