POJ1323 Game Prediction(贪心算法训练)

Time Limit: 1000MS          Memory Limit: 10000K          Total Submissions: 10475          Accepted: 5046

Description

Suppose there are M people, including you, playing a special card game. At the beginning, each player receives N cards. The pip of a card is a positive integer which is at most N*M. And there are no two cards with the same pip. During a round, each player chooses one card to compare with others. The player whose card with the biggest pip wins the round, and then the next round begins. After N rounds, when all the cards of each player have been chosen, the player who has won the most rounds is the winner of the game. 
Given your cards received at the beginning, write a program to tell the maximal number of rounds that you may at least win during the whole game.

Input

The input consists of several test cases. The first line of each case contains two integers m (2~20) and n (1~50), representing the number of players and the number of cards each player receives at the beginning of the game, respectively. This followed by a line with n positive integers, representing the pips of cards you received at the beginning. Then a blank line follows to separate the cases. 
The input is terminated by a line with two zeros.

Output

For each test case, output a line consisting of the test case number followed by the number of rounds you will at least win during the game.

Sample Input

2 5
1 7 2 10 9

6 11
62 63 54 66 65 61 57 56 50 53 48

0 0

Sample Output

Case 1: 2
Case 2: 4

一、题目大意

有M个人,一人N张牌,每轮牌面最大的人赢(牌面只可能是1~M*N中的一个数且不重复),给出一个人的牌,求其至少能够赢的局数。

二、解题思路

这个题目的思路比较简单,由于人数和牌数比较少,所以直接暴力解,以第一个样例进行分析,用一个bool类型的数组。标记我手上有的牌为true,表格如下:

10 9 8 7 6 5 4 3 2 1
? ? ? ? ?

?本人       ● 对手

显然当本人为7时,对手可能有牌面为8可以赢过我,以此类推,所以可以用一个int类型记录对手目前拥有的比本人最大的牌还要大的牌的数目,当遇到我拥有的大牌的时候就消耗一张大牌,假如此时对手没有比本人还要大的牌,那么这一轮本人绝对胜利。

三、具体代码

 1 #include <cstdio>
 2 #include <cstring>
 3
 4 int main(){
 5     int m, n, i, j, tmp, count=1;
 6     bool cards[1050];
 7     while(scanf("%d%d", &m, &n) && m && n){
 8         memset(cards, false, sizeof(cards));
 9         for(i=0; i<n; i++){
10             scanf("%d", &j);
11             cards[j] = true;
12         }
13         int large_cards=0, ans=0;
14         for(i=m*n; i>0; i--){
15             if(!cards[i]) large_cards++;
16             else{
17                 if(large_cards == 0) ans++;
18                 else large_cards--;
19             }
20         }
21
22         printf("Case %d: %d\n", count, ans);
23         count++;
24     }
25
26     return 0;
27 } 

时间: 2024-10-07 04:17:23

POJ1323 Game Prediction(贪心算法训练)的相关文章

POJ1017 Packets(贪心算法训练)

Time Limit: 1000MS          Memory Limit: 10000K          Total Submissions: 51306          Accepted: 17391 Description A factory produces products packed in square packets of the same height h and of the sizes 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. These pro

POJ1700 Crossing River(贪心算法训练)

Time Limit: 1000MS          Memory Limit: 10000K          Total Submissions: 13301          Accepted: 5087 Description A group of N people wishes to go across a river with only one boat, which can at most carry two persons. Therefore some sort of shu

贪心算法训练(五)——种树

1. 问题描述 一条街道的一边有几座房子,因为环保原因居民想要在路边种些树,路边的地区被分割成 n 块,并被编号为 1…n,每块大小为一个单位尺寸并最多可以种一棵树,每个居民想在门前种些树并指定了三个数 b,e,t 这三个数分别表示该居民想在 b 和 e 之间最少种 t 棵树,当然,b<=e,t<=e-b+1 ,允许居民想种树的子区域可以交叉.出于资金紧缺的原因,环保部门请你求出能满足所有居民的种树要求时所需树的最少数量 2.输入格式 第一行为 n,表示区域的个数 第二行为 h,表示房子的数目

转载︱案例 基于贪心算法的特征选择

转载︱案例 基于贪心算法的特征选择 用GA算法设计22个地点之间最短旅程-R语言实现 -------------------------------------------------------- greedy Algorithm Feature Selection 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑, 它所做出的是在某种意义上的局部最优解.贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心 策

蓝桥杯:算法训练之最大最小公倍数

算法训练 最大最小公倍数 时间限制:1.0s   内存限制:256.0MB 问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少. 输入格式 输入一个正整数N. 输出格式 输出一个整数,表示你找到的最小公倍数. 样例输入 9 样例输出 504 数据规模与约定 1 <= N <= 106. 注:贪心,从最大的三个数开始考虑,如果最大的数为奇数,那么相邻的三个数中有两个奇数,最大公约数为1,最小公倍数就为n(n-1)(n-2). 如果为偶数,那么往后移,考虑n(n-

算法专题——贪心算法

贪心算法正确性证明: 1.证明贪心选择性质:经过贪心选择,可以获得最优解 2.最优子结构:证明子问题最优解与贪心选择组合,结果依然是最优解 •All we really need to do is argue that an optimal solution to the subproblem, combined with the greedy choice already made, yields an optimal solution to the original problem. 例:

贪心算法总结

贪心算法总结 一.算法思想 贪心法的基本思路: 从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解.当达到某算法中的某一步不能再继续前进时,算法停止. 该算法存在问题: 1. 不能保证求得的最后解是最佳的. 2. 不能用来求最大或最小解问题: 3. 仅仅能求满足某些约束条件的可行解的范围. 实现该算法的过程: 从问题的某一初始解出发: while 能朝给定总目标前进一步: 求出可行解的一个解元素: 由所有解元素组合成问题的一个可行解: 二.ACM做题情况 本专题,学习贪心算法

贪心算法+实例

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说, 不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解.(官方解释). 所谓的贪心算法主要理解就在这个“贪心”上面,所谓贪心,就是找到最好的,也就是上面说的最优解. 我们可以通过各种方式找到当前的最优解,将最有解利用过后,将其清除,再去找下一个最优解. 来一个例子来说明. 题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费

63天算法训练详细说明

目的 熟悉新近学习的编程语言各种语法糖,最大化的精简代码. 复习基本数据结构和基本算法,提高代码效率. 训练持久力. 说明 所有的算法题目来源于LeetCode,版权归官方所有. 知乎:大家是如何刷LeetCode的? Github:详尽的LeetCode题解 Github:动画演示LeetCode题目 常用数据结构和算法的动态可视化 个人训练 截至2020年2月26日时,基础题目共有1257道,按一个随笔3道题目为例,预计花费时间1257/3=419天,大概是1年3个月,当然某些时候状态好或者