AOJ 2.Home Work

贪心算法

如果在类中定义自定义类型对应sort的比较函数,要注意再比较函数前加上static。说明该函数是静态函数,在内存中占用固定的内存。

 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4
 5 #define REP(n) for(int o=0;o<n;o++)
 6
 7
 8 class LOVE {
 9 private:
10     static const int maxn = 25;
11     int M, N;
12     struct node {
13         int T, V;
14         double p;
15     }paper[maxn];
16
17     static bool compare_node(node a, node b) {
18         return a.p > b.p;
19     }
20
21 public:
22     bool Do() {
23         scanf("%d%d", &M, &N);
24         if (M == 0 && N == 0)return false;
25         REP(M) {
26             int T, V;
27             scanf("%d%d", &T, &V);
28             paper[o].T = T;
29             paper[o].V = V;
30             paper[o].p = (double)V / (double)T;
31         }
32
33         sort(paper, paper + M, compare_node);
34
35         //REP(M)
36             //printf("T=%d V=%d p=%f\n", paper[o].T, paper[o].V, paper[o].p);
37
38         double ans = 0;
39         for (int i = 0; i < M; i++) {
40             int temp = N - paper[i].T;
41             ans += paper[i].V;
42             if (temp < 0) {
43                 ans += temp*paper[i].p;
44                 break;
45             }
46             N = temp;
47         }
48
49         printf("%.2f\n", ans);
50         return true;
51     }
52 };
53
54 int main() {
55     LOVE LIVE;
56     while (LIVE.Do());
57     return 0;
58 }
时间: 2024-11-09 00:49:27

AOJ 2.Home Work的相关文章

AOJ 169 找零钱 DP OR 母函数

一直觉得这题因为有总量限制,是不能用母函数解的,今天偶然发现原来是可以的,记录一下. 只要搞母函数的时候多开一维来表示用了多少个硬币就好了,其实就是目标状态是二维的母函数 类似于 假设我现在要处理的面值是2      (1 + x^2 * y + x^4 * y ^ 2 + x ^ 6 * y ^ 3...) 就表示用0个,1个,2个,3个..硬币的状态了. 看来母函数最重要的还是对式子本身的理解,这样才能应对各种变化. #include <cstdio> #include <cstri

AOJ 0121: Seven Puzzle【BFS】

From: AOJ 0121 思路:与前几题的bfs不同,这次的bfs没有明确的移动对象,看似任意一个数都可以当成对象移动.这时我们只需要抓住一个格子就行,比如我们把0作为移动对象,那么0在地图中漫游所有的格子得到的肯定就是问题的解空间.由于题目的输入是多个case,如果对每个case都运行一遍bfs就会TLE.这时我们祭出dp技能,只需要一次bfs就将解空间算出来,以后每个case只要到解空间中去找就行了. #include <iostream> #include <string>

BFS AOJ 0558 Chess

AOJ 0558 Chess http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0558 在H * W的地图上有N个奶酪工厂,每个工厂分别生产硬度为1-N的奶酪.有一只老鼠准备从出发点吃遍每一个工厂的奶酪.老鼠有一个体力值,初始时为1,每吃一个工厂的奶酪体力值增加1(每个工厂只能吃一次),且老鼠只能吃硬度不大于当前体力值的奶酪. 老鼠从当前格到上下左右相邻的无障碍物的格需要时间1单位,有障碍物的格不能走.走到工厂上时即可吃到该工厂的

[转] AOJ 0525 Osenbei《挑战程序设计竞赛(第2版)》练习题答案

来自 码农场 ? AOJ 0525 Osenbei<挑战程序设计竞赛(第2版)>练习题答案 只把代码复制过来,原博的其他分析请看链接. 1 #include <iostream> 2 #include <bitset> 3 #include <algorithm> 4 5 using namespace std; 6 7 bitset<10000> cookie[10]; 8 9 ///////////////////////////SubMai

UVALive 4639 &amp;&amp; SPOJ SPOINTS &amp;&amp; POJ 3805 &amp;&amp; AOJ 1298 Separate Points 求两个凸包是否相交 难度:3

https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2640 http://www.spoj.com/problems/SPOINTS/en/ http://poj.org/problem?id=3805 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1298 要

POJ 1979 POJ 3009 AOJ 0033 AOJ 0118 [搜索类题目][0033贪心模拟]

/** POJ 1979 BFS */ #include <stdio.h> #include <string.h> #include <iostream> #include <queue> using namespace std; const int N = 20 + 5; int mp[N][N]; int sx,sy; int n, m; int vis[3000]; int dirx[] = {0, 1, 0, -1}; int diry[] = {

Greedy:Paint Color(AOJ 0531)

涂颜料 题目大意:在一个1000000*1000000的矩阵中放入几块木板,问你这些木板把矩阵划分成了几个区域?输入会给左下角和右上角的坐标,输入W==0且H==0结束. 这一题是书上的作业题,书上有一道差不多的例题,但是书上那道例题是用的直线的,而且他的坐标是点格,而这道题是坐标(这个很重要,我一开始没有区分好导致理解不了).那么这一题肯定要用到坐标压缩的(1000000*1000000太大了,我们可以把木板压缩到最小就可以了),标准的直接看代码就好了,很容易理解. 然后现在这题很难的一个地方

AOJ -0189 Convenient Location (任意两点间的最短路)

http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=78207 看懂题就好. 求某一办公室到其他办公室的最短距离. 多组输入,n表示n条关系,下面n次每次输入 x y d表示x到y的距离是d. 输出办公室的编号和距离. 因为 顶点数小于10,直接floyed求出所有距离之后,枚举出最短距离即可. 1 /* *********************************************** 2 Author : zch

AOJ 756.电梯

电梯 Time Limit: 1000 ms   Case Time Limit: 1000 ms   Memory Limit: 64 MBTotal Submission: 21   Submission Accepted: 13 Description 在城市的高层建筑物中,只有一部电梯,由N个正整数组成一个请求列表,列表中的数字表示电梯将在哪层停,电梯按列表顺序依次停靠.电梯每上行一层需要花6秒时间,每下行一层需要花4秒时间,电梯每停一次需要用时5秒.对于给定的请求列表,计算完成所有请求

AOJ 0189 Convenient Location (Floyd)

题意: 求某一个办公室 到其他所有办公室的 总距离最短  办公室数 不超过10 输入:多组输入,每组第一行为n (1 ≤ n ≤ 45),接下来n行是 (x, y, d),x到y的距离是d输出:办公室号 和 最短距离 #include <iostream> #include <stdio.h> #include <algorithm> #include <cstring> #include <string> using namespace std