poj1323-Game Prediction(贪心思想)

贪心的思想:尽量的从最大值找起。然后在剩余之中,再从最大值找起。
一,题意:
  M个人,每人N张牌,每轮比较谁出的牌大,最大者为胜。现在给定M和N,以及你的牌,要求输出你至少能确保获得几轮的胜利
  从"至少能赢几轮"可以看出:每个人必定都从最大的牌开始出。(只判定输赢两种情况即可)
二,思路:
  1,输入并从小到大排序;
  2,循环并记录赢的次数;
  3,输出;
三,步骤:
  1,sort函数排序
  2,先最大的牌比较,再从剩余的牌中,找最大的牌比较,依次循环下去,直到手中牌出完。
    循环开始:i = n-1(手中最大的牌)循环条件win+lose != n(牌未出完)循环处理 i--(每次循环完手中的牌跳到前一张);
    if 手中最大的牌值等于牌中最大的牌值时,必赢win++ ; max--;
    else 必输lose++ ; max -= 2;
   注意:赢了,牌中最大牌值减一,输了减二。
  3,输出。

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 int main(){
 5     int m , n , Case = 0 ;
 6     int a[1005];
 7     while(cin>>m>>n,m||n){
 8         Case++;
 9         for(int i = 0 ; i < n ; i++){
10             cin>>a[i];
11         }
12         sort(a,a+n);      //从小到大排序
13         int win = 0 , lose = 0 ;
14         int max = n*m ;   //存储牌中最大的牌
15         for(int i = n - 1 ; win+lose != n ; i-- ){ //win+lose==n 表示手上的牌已经出完
16             if(max==a[i]){
17                 win++;    //牌中最大的牌==手上最大的牌时,必赢一次
18                 max--;       //赢了,牌中最大的牌值只要减一即可
19             }
20             else{         //否则,必输一次。
21                 lose++;   //记录输的次数
22                 max-=2;   //输了,牌中最大的牌值减二
23             }
24         }
25         cout<<"Case "<<Case<<": "<<win<<endl;
26     }
27     return 0;
28 }

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-14 14:30:37

poj1323-Game Prediction(贪心思想)的相关文章

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

hdu 4105 贪心思想

淋漓尽致的贪心思想 波谷一定是一位数,波峰一位数不够大的时候添加到两位数就一定够大了的. 当在寻找波谷碰到零了就自然当成波谷. 当在寻找波峰时碰到零时,将前面的波谷加到前一个波峰上,让当前的零做波谷,使得波谷的值尽量小,这就是本题最关键的贪心思想,一直想不到. 代码中:a表示前一个值,b表示当前考虑的值,tag为偶数时表示正在寻找波谷,奇数时在寻找波峰. #include<iostream> #include<cstdio> #include<cstring> #inc

POJ 3253 Fence Repair 类似哈夫曼树的贪心思想

Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 24550   Accepted: 7878 Description Farmer John wants to repair a small length of the fence around the pasture. He measures the fence and finds that he needs N (1 ≤ N ≤ 20,000)

NOIP2012BLOCKADE贪心思想证明

这道题的做法是二分时间并检验这个时间是否可行.检验的方法要用到贪心思想. 对于不能到根结点的军队应该尽量向根结点走. 如果军队A能走到根结点但到根结点后剩余的时间不够返回根结点的儿子B,应该让军队A守B. 否则把军队A加入优先队列,用剩余时间小的军队匹配到根结点距离小的儿子. 证明: 一个军队可控制自己和以自己为根的子树.越向上走控制的结点越多. 把这个军队记作A,如果不这样,我们必须要用另一个到达根结点的军队,记作C,因为A剩余时间小于到B的时间,如果用C,则C剩余的时间大于到B的时间,这样交

HDU 1338 Game Prediction 贪心

Problem 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. Du

POJ3544 Journey with Pigs 动规基础贪心思想

非常经典的贪心题目,没有严格证明的话,肯定是YY着做的,题意: 约翰要从A到B,途中会经过N个村庄,他会带N只猪,然后卖掉,每个村庄卖一只,第i个村庄的人出价pi 每斤,从A到第i个存在的距离为disi,而且运一只猪需要话花费t * disi每斤,t一开始会给定 输入第一行n,t 接下来第一行 n个数,代表各个猪的重量 在接下来第二行n个数,代表每个村庄距离A的距离dis 在接下来第三行n个数,代表每个村庄出价p 输出n个数,表示每个村庄买的哪只猪 这题目一开始看到就往dp方向去想,但是发现不行

uva 10020- Minimal coverage (贪心思想 简单区间覆盖)

题目大意:给出一个范围M,然后给出若干的区间,以0 0 终止, 要求用最少的区间将0 ~M 覆盖,输出最少个数以及方案. 解题思路:典型的区间覆盖问题,算法竞赛入门经典P154上有讲. /*author: charkj_z */ /*time: 0.108s */ /*rank: 674 */ /*为什么不把没用的地方去掉? 因为去掉了我觉得不像我能写出来的*/ /*Ac code : */ #include<stdio.h> #include<string.h> #include

图论——关于Dijkstra的贪心思想

引语 作为求解最短路问题的算法中最稳健的算法,Dijkstra以其惊奇的操作和独特的魅力,吸引了无数OIer学习.钻研.身为一名蒟蒻,本人以有限的能力付诸仔细的思考,对于Dijkstra算法中贪心思想的正确性有了新的认识. 咳咳,相信我,这是一篇很正常的博客,本人也是一名很正常的博主. 大多数OIer在初学Dijkstra算法时都不求甚解,单纯的把板子背下来就算了,而对于其中的贪心思想的内涵并没有做过深入挖掘.对于其贪心算法的正确性,我以我个人的理解,进行非严格的证明,希望有助于大家理解Dijk

算法之贪心思想

这个贪心的行为在算法中也成为了一种指导思想,也就是说贪心算法所作出的选择在当时的环境下是最好的,说深一点就是它只是某种 意义上的局部最优解,但不一定是全局最优解,此时往往接近于最优解. 一: 优点 前面也说了,贪心只是求的当前环境下的最优解,而不是追究整体的最优解,所以贪心就避免了为求的整体最优解而枚举各种方案所 耗费的时间. 二: 问题 ① 不能保证贪心所得出的解是整体最优的. ② 不能用来求最大解和最小解问题. ③ 只能求满足某些约束条件的可行解的范围. 三: 案例 其实说到贪心,基本上都会