http://poj.org/problem?id=1010

题意:给你n种邮票的价值,到0结束,这些邮票价值有可能相同,但是形状是不同的。

还有给你m个收藏家所需要收藏的邮票的总价格。到0结束。

每一个case包括两行,以输入eof为结束标志。

求最优解。其最优解也就是说相同价格可以收到更多的邮票,

如果邮票的种类相同,那么希望可以收到的张数更少越好,如果张数都相同的话

那么最好是最高价值的邮票的价值越高越高。

每个收藏家不能收超过4张邮票

如果不满足条件就输出none

如果有最高价值相同,张数相同,切种类数也相同的,则为输出tie。

其他的则输出 价值 (种类): 每一张邮票的价值。

思路:我是用一个结构体来记录每一种情况,用judge来判重。

用结构体来记录是哪几个价格的邮票(注意是价值相同的邮票不一定是同一张)。

记录这些中的最高价值。以及种类数。以及一共有几张邮票。

这道题的做法有很多种,我用的是直接暴搜,下次有时间在用搜索来做。

 #include <stdio.h>
#include <string.h>
#include <stdlib.h> #define size 100 int va[size],need[size]; int cmp(const void *a,const void *b)
{
return (*(int *)a)-(*(int *)b);
} struct as{
int kind; //记录种类,最大值,以及每张邮票的价值,邮票的张数。
int mx;
int wha[];
int num;

}s[]; int main()
{
while(scanf("%d",&va[])!=EOF)
{
int i=,j=,an=,q[],tmp,flog,ans;
bool judge[];
while(scanf("%d",&va[i]),va[i]) i++;
while(scanf("%d",&need[j]),need[j]) {
an=;
memset(judge,true,sizeof(judge));
memset(s,,sizeof(s));
for(int a=;a<=i;a++)
for(int b=;b<=i;b++)
for(int c=;c<=i;c++)
for(int d=;d<=i;d++)
{
ans=va[a]+va[b]+va[c]+va[d];
if(ans==need[j]){
q[]=a,q[]=b,q[]=c,q[]=d;
qsort(q,,sizeof(q[]),cmp);
if(judge[q[]*+q[]*+q[]*+q[]]) judge[q[]*+q[]*+q[]*+q[]]=false; //这个是我用来判重的,如果使用的几张都是相同的的话,那么可以直接跳过。
else continue;
s[an].wha[]=va[a];
s[an].wha[]=va[b];
s[an].wha[]=va[c];
s[an].wha[]=va[d];
qsort(s[an].wha,,sizeof(s[an].wha[]),cmp); //用来记录邮票的价值。
s[an].mx=s[an].wha[];
s[an].kind=;
s[an].num=;
if(q[]!=i) s[an].num++;
for(int l=;l>;l--){ //记录邮票的总的张数以及其种类,上面的q我是用来记录邮票的位置的,因为在不同位置上的邮票是不同的,即使价格有可能相同。
if(q[l]!=q[l-]&&q[l]!=i) s[an].kind++;
if(q[l]!=i) s[an].num++;
}
an++;
}
}
if(an==) printf("%d ---- none\n",need[j]); //下面的都是用来判断输出的。
else {
tmp=,flog=;
for(int m=;m<an;m++)
{
if(s[m].kind>s[tmp].kind) {
tmp=m;
flog=;
continue;
}
if(s[m].kind==s[tmp].kind){
if(s[m].num<s[tmp].num) {tmp=m;flog=;}
else{
if(s[m].num==s[tmp].num) {
if(s[m].mx>s[tmp].mx) {tmp=m;flog=;}
else if(s[m].mx==s[tmp].mx) flog++;
}
}
}
}
if(flog) printf("%d (%d): tie\n",need[j],s[tmp].kind);
else {
printf("%d (%d):",need[j],s[tmp].kind);
for(int m=;m<s[tmp].num;m++)
{
if(s[tmp].wha[m]==) {
s[tmp].num++;
}else printf(" %d",s[tmp].wha[m]);
}
printf("\n");
}
}
j++;
}
}
return ;
}

poj 1010的更多相关文章

  1. POJ 1010 题目翻译+题解

    题目实在是太难懂了,我翻译了一下... STAMPS Description Have you done any Philately lately? 你最近有没有集邮? You have been h ...

  2. 51nod 1010 只包含因子2 3 5的数 && poj - 1338 Ugly Numbers(打表)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1010 http://poj.org/problem?id=1338 首先 ...

  3. POJ题目排序的Java程序

    POJ 排序的思想就是根据选取范围的题目的totalSubmittedNumber和totalAcceptedNumber计算一个avgAcceptRate. 每一道题都有一个value,value ...

  4. POJ 题目分类(转载)

    Log 2016-3-21 网上找的POJ分类,来源已经不清楚了.百度能百度到一大把.贴一份在博客上,鞭策自己刷题,不能偷懒!! 初期: 一.基本算法: (1)枚举. (poj1753,poj2965 ...

  5. poj 3268(spfa)

    http://poj.org/problem?id=3268 对于这道题,我想说的就是日了狗了,什么鬼,定义的一个数值的前后顺序不同,一个就TLE,一个就A,还16MS. 感觉人生观都奔溃了,果然,题 ...

  6. POJ 2570(floyd)

    http://poj.org/problem?id=2570 题意:在海底有一些网络节点.每个节点之间都是通过光缆相连接的.不过这些光缆可能是不同公司的. 现在某个公司想从a点发送消息到b点,问哪个公 ...

  7. Divide and conquer:Telephone Lines(POJ 3662)

    电话线 题目大意:一堆电话线要你接,现在有N个接口,总线已经在1端,要你想办法接到N端去,电话公司发好心免费送你几段不用拉网线,剩下的费用等于剩余最长电话线的长度,要你求出最小的费用. 这一看又是一个 ...

  8. poj 2236:Wireless Network(并查集,提高题)

    Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 16065   Accepted: 677 ...

  9. (转)POJ题目分类

    初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推. ...

随机推荐

  1. Drupal 7.31SQL注入getshell漏洞利用详解及EXP

    0x00 这个漏洞威力确实很大,而且Drupal用的也比较多,使用Fuzzing跑字典应该可以扫出很多漏洞主机,但是做批量可能会对对方网站造成很大的损失,所以我也就只是写个Exp不再深入下去. 0x0 ...

  2. mysql]一次主从数据不一致的问题解决过程()

    问题 要解决问题就是怎么对比不一致,然后在不影响业务的情况下,修复数据不一致的问题,把从库缺少的数据补上 下面是能想到和找到的几个方案 1 从新从0开始同步,虽然对主库的使用没有影响,但是那么大的数据 ...

  3. C#实现Excel模板导出和从Excel导入数据

    午休时间写了一个Demo关于Excel导入导出的简单练习 1.窗体 2.引用office命名空间 添加引用-程序集-扩展-Microsoft.Office.Interop.Excel 3.封装的Exc ...

  4. DOS批处理中%cd%和%~dp0的区别

    DOS批处理中%cd%和%~dp0的区别   在DOS的批处理中,有时候需要知道当前的路径. 在DOS中,有两个环境变量可以跟当前路径有关,一个是%cd%, 一个是%~dp0.       这两个变量 ...

  5. 使用cachemanager做缓存(Session的缓存)

    1.我在这里直接用 cachemanager.redis 往redis里面存储缓存数据2.步骤 1)下载CacheManager.Redis(包含了CacheManager.Core) 下载Stack ...

  6. mapreduce 模板

    /*** * MapReduce Module * @author nele * */ public class ModuleMapReduce extends Configured implemen ...

  7. Swift2.1 语法指南——析构过程

    原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...

  8. webrtc第二篇 聊天室

    聊天室模型不一样考虑的问题也不一样 1.websocket文本聊天 * step1 : 向聊天室所有用户(不包括该用户自己)发送当前用户上线信息.客户端用户栏回添加此用户 * step2 : 将该用户 ...

  9. mysql常用语句总结

    1.创建语句 CREATE DATABASE database_name //创建数据库 //删表 DROP TABLE IF EXISTS `t_social_user_extend`; //建表C ...

  10. Android开发App工程结构搭建

    本文算是一篇漫谈,谈一谈关于android开发中工程初始化的时候如何在初期我们就能搭建一个好的架构.      关于android架构,因为手机的限制,目前我觉得也确实没什么大谈特谈的,但是从开发的角 ...