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. Logback LogBack

    1.简介 LogBack是一个日志框架,它与Log4j可以说是同出一源,都出自Ceki Gülcü之手.(log4j的原型是早前由Ceki Gülcü贡献给Apache基金会的) 1.1 LogBac ...

  2. 缺少索引导致的服务器和MYSQL故障。

    故障现象: 网站访问缓慢. 数据库RDS: CPU满,连接数满,其他值都是空闲. apache服务器:CPU正常,IO正常,流量报警,内存爆满. 解决思路: 一.没遇到过此情况,一脸懵逼. 二.请教大 ...

  3. 使用supervisor监控进程

    在linux下监控进程,可以使用inittab,最近找到了supervisor,也很好用,记录一下:1.系统要安装python,并安装与之对应的setuptools,下载地址在此2.安装:# sh s ...

  4. ASP.NET MVC 快速开发框架之 SqlSugar+SyntacticSugar+JQWidgetsSugar+jqwidgets(转)

    jqwidgets.js: 是一个功能完整的框架,它具有专业的可触摸的jQuery插件.主题.输入验证.拖放插件.数据适配器,内置WAI-ARIA(无障碍网页应用)可访问性.国际化和MVVM模式支持. ...

  5. \n\t\r代表什么意思

    \t水平制表(跳到下一个tab位置)\r回车(将当前位置移到本行开头)\n换行(将当前位置移到下一行行开头)

  6. 利用afxDump来调试自己的程序

    http://blog.csdn.net/sstower/article/details/7714199

  7. Myeclipse中的web项目审查(jquery-2.1.1.min.js)出现错误

    前言,本来在把web项目搞得好看一些,从网上下载了一个很炫酷的模板导入web中,无奈出现了错误,如下:

  8. Jquery Md5加密解密

    首先需要调用md5解析的js文件.(右击-目标另存为方式下载) http://files.cnblogs.com/files/colinliu/md5.js 加密方法参考: <script ty ...

  9. iOS: ARC & MRC下string内存管理策略探究

    ARC & MRC下string内存管理策略探究 前两天跟同事争论一个关于NSString执行copy操作以后是否会发生变化,两个人整了半天,最后写代码验证了一下,发现原来NSString操作 ...

  10. HDOJ 4497 GCD and LCM

    组合数学 GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...