Question:http://poj.org/problem?id=1010
问题点:DFS、剪枝。
 Memory: 220K        Time: 32MS
Language: C++ Result: Accepted #include <iostream>
using namespace std; #define MAX_STAMP_TYPE 100
int stamp[MAX_STAMP_TYPE];
bool tie,none;
int now[],ans[];//记录stamp的index
int max_stamp;//记录最大邮票
int getInfo(int sta[]){
int tmp_a,tmp_b,tmp_c;
tmp_a=;
tmp_b=;
tmp_c=sta[];
for(int i=;i< && sta[i]>;i++)
{
if(sta[i-]!=sta[i]) tmp_a++;//取种类数 千位
tmp_b++;//取总张数 百位
tmp_c=sta[i-]>sta[i]?sta[i-]:sta[i];//取最大值 十位和个位
}
return tmp_a*+(-tmp_b)*+tmp_c;
}
void compare(){
none=false;//只要有结果,none就置为false
int nowInfo=getInfo(now);
int ansInfo=getInfo(ans);
char r=nowInfo>ansInfo?'g':(nowInfo<ansInfo?'l':'e');//g:出现更优解 l:不如现有解 e:tie
if(r=='g'){//如果出现更优解,将now中的数据复制到ans中保存
memcpy(ans,now,sizeof(now));
tie=false;
}else if(r=='e'){
tie=true;
}
return;
}
void dfs(int num,int cnt){
if(num==){//剩余数为0,即为解的出现条件
compare();
return;
}else if(cnt>=){//邮票数不能大于4张
return;
}else if(num<){//剩余需分配数不能小于0
return;
}else if(num>max_stamp*(-cnt)){
return;
}
for(int i=(cnt>?now[cnt-]:);i<=stamp[];i++)
{
now[cnt]=i;
dfs(num-stamp[i],cnt+);
now[cnt]=;
}
}
int main()
{
do{
int tmp,i=;
max_stamp=;
memset(stamp,,sizeof(stamp));
while(cin>>tmp && tmp!=){
stamp[i++]=tmp;
max_stamp=max_stamp>tmp?max_stamp:tmp;
}
stamp[]=i-;//记录邮票种类数
while(cin>>tmp && tmp!=){
tie=false;
none=true;
memset(now,,sizeof(now));
memset(ans,,sizeof(ans));
dfs(tmp,);
if(tie){
cout<<tmp<<" ("<<getInfo(ans)/<<"): "<<"tie"<<endl;
}else if(none){
cout<<tmp<<" ---- none"<<endl;
}else{
cout<<tmp<<" ("<<getInfo(ans)/<<"):";
for(int i=;i< && ans[i]>;i++){
cout<<" "<<stamp[ans[i]];
}
cout<<endl;
}
}
}while(getchar()!=EOF);
return ;
}

北大ACM(POJ1010-STAMPS)的更多相关文章

  1. 北大ACM - POJ试题分类(转自EXP)

    北大ACM - POJ试题分类 -- By EXP 2017-12-03 转载请注明出处: by EXP http://exp-blog.com/2018/06/28/pid-38/ 相关推荐文: 旧 ...

  2. 北大 ACM 分类 汇总

    1.搜索 //回溯 2.DP(动态规划) 3.贪心 北大ACM题分类2009-01-27 1 4.图论 //Dijkstra.最小生成树.网络流 5.数论 //解模线性方程 6.计算几何 //凸壳.同 ...

  3. POJ1010 Stamps

    题目来源:http://poj.org/problem?id=1010 题目大意: 某邮局要设计新的邮资管理软件,依据顾客的需要和现有的面值给顾客分派邮票. 该邮局有很多顾客是集邮爱好者.这些人希望得 ...

  4. 北大ACM题库习题分类与简介(转载)

    在百度文库上找到的,不知是哪位大牛整理的,真的很不错! zz题 目分类 Posted by fishhead at 2007-01-13 12:44:58.0 -------------------- ...

  5. POJ-1010 Stamps

    [题目描述] 题目大意是:邮票发行商会发行不同面值.不同种类的邮票给集邮爱好者,集邮爱好者有总目标面额,通过不同的邮票组合(总数在4张以内)达到该面值,卖给集邮爱好者.另外,发行商发行的邮票面值最多2 ...

  6. 北大ACM试题分类+部分解题报告链接

    转载请注明出处:優YoU http://blog.csdn.net/lyy289065406/article/details/6642573 部分解题报告添加新内容,除了原有的"大致题意&q ...

  7. 北大ACM - POJ试题分类

    1.入门水题 可用于练手与增强自信 POJ-1003POJ-1004 POJ-1005 POJ-1207 POJ-3299 POJ-2159 POJ-1083POJ-3094 2.初级 2.1. 基本 ...

  8. 北大ACM(POJ1014-Dividing)

    Question:http://poj.org/problem?id=1014 问题点:抽屉原理.dfs.多重背包. Memory: 248K Time: 16MS Language: C++ Res ...

  9. 北大ACM(POJ1013-Counterfeit Dollar)

    Question:http://poj.org/problem?id=1013 问题点:排除+验证. Memory: 244K Time: 16MS Language: C++ Result: Acc ...

  10. 北大ACM(POJ1012-Joseph)

    Question:http://poj.org/problem?id=1012 问题点:约瑟夫环. Memory: 220K Time: 329MS Language: C++ Result: Acc ...

随机推荐

  1. 【转】Python实现的线程池

    import Queue, threading, sys from threading import Thread import time,urllib # working thread class ...

  2. jQuery 属性操作 - addClass() 方法

    使用 addClass() 和 removeClass() 来移除 class,并添加新的 class. <html> <head> <script type=" ...

  3. 高级I/O之I/O多路转接——pool、select

    当从一个描述符读,然后又写到另一个描述符时,可以在下列形式的循环中使用阻塞I/O: ) if (write(STDOUT_FILENO, buf, n) != n) err_sys("wri ...

  4. 经典排序算法总结与实现 ---python

    原文:http://wuchong.me/blog/2014/02/09/algorithm-sort-summary/ 经典排序算法在面试中占有很大的比重,也是基础,为了未雨绸缪,在寒假里整理并用P ...

  5. js中数组操作

    var selectedCodeArray = []; var num = $.inArray(值, selectedCodeArray)  //值在数组中的位置 selectedCodeArray. ...

  6. webrtc学习(二): audio_device之opensles

    audio_device是webrtc的音频设备模块.  封装了各个平台的音频设备相关的代码 audio device 在android下封装了两套音频代码. 1. 通过jni调用java的media ...

  7. 如何使用nodejs发邮件

    昨天就开始想使用nodemailer来实现一个发送邮件的功能,不过发现了很多个坑,网上给的资料也很杂很乱,所以决定写一篇真正能用的来帮助大家减少弯路 首先,我们先来看下代码,如上所示. 步骤: 1.下 ...

  8. hive和hbase整合的原因和原理

    为什么要进行hive和hbase的整合? hive是高延迟.结构化和面向分析的: hbase是低延迟.非结构化和面向编程的. Hive集成Hbase就是为了使用hbase的一些特性.或者说是中和它们的 ...

  9. Data Structure 之 最优二叉树

    给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree).哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近. ...

  10. eclipse[downloads]

    下载J2EE:http://www.eclipse.org/downloads/ 下载WPT插件:http://download.eclipse.org/webtools/updates 下载TOMC ...