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. Memcached【Magent+Memcached】集群

    Memcached介绍  事件处理libevent是个程序库,它将Linux的epoll.BSD类操作系统的kqueue等事件处理功能封装成统一的接口.即使对服务器的连接数增加,也能发挥O(1)的性能 ...

  2. rehat 出现GDB debuginfo-install 问题处理

    本人使用rhel 6    GDB 调试代码时,出现以下错误: Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.166 ...

  3. 卸载金山猎豹免费WIfi后,上不了网的解决办法

    进入网络和共享中心,打开网络适配器,右键无线连接,属性,就在打开属性的那个页面,在靠上的位置有个LieBao xxx Driver,卸载. 然后,打开浏览器,试试这个链接:www.baidu.com. ...

  4. codeforces Diagrams & Tableaux1 (状压DP)

    http://codeforces.com/gym/100405 D题 题在pdf里 codeforces.com/gym/100405/attachments/download/2331/20132 ...

  5. python4delphi 使用

    Python 开发桌面程序, 之前写过一个使用IronPython的博客. 下面这个方案使用 delphi 作为主开发语言,通过 python4delphi 控件包将 python 作为 script ...

  6. PHP的 Mysqli扩展库的多语句执行

    $mysqli->multi_query($sqls);     执行多个sql语句,返回true/false 有结果集时,使用 $mysqli->store_result(); 来获取结 ...

  7. lianjie

    数值策划入门:如何确定游戏中的资源价值和定价http://bbs.gameres.com/thread_494366.html 一张常规的RPG游戏地图的制作流程 http://bbs.gameres ...

  8. 软件测试-----Graph Coverage作业

    /******************************************************* * Finds and prints n prime integers * Jeff ...

  9. 自己动手开发jQuery插件

    因为工作需要,所以这几天琢磨了一下关于jQuery插件开发的问题,经过一天鏖战,终于完成自己动手做的第一个jQuery插件,对于俺这种见了css就蛋疼菊紧的人来说,一天时间8小时,保守估计有5个小时在 ...

  10. LESS介绍及其与Sass的差异

    自从一个月前我偶然发现LESS之后我就开始坚定的使用它了.CSS本身对我来说从来不是问题,但是我很好奇使用变量来沿着一个调色盘为我的网站或模板创建一些东西的想法.拥有一个提供固定数量选项可选的色盘可以 ...