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. Sql2008R2设置远程链接

    下边的文章是从百度经验里粘过来的.. 经过测试确实有效..留个备份.. 有个小情况在前边说一下.. 在操作前一定要确定自己的sa用户密码是不是一样..不要以为自己知道的是对的就直接略过某些步骤.. 俗 ...

  2. array_map()与array_shift()搭配使用 PK array_column()函数

    array_map()与arra_shift()搭配使用,还是来看例子吧,比较直观一点 <?php $user = array( 0 => array( 'name' => '张三' ...

  3. 解决windows系统80端口被占用问题(转)

    在windows下部署web应用(80端口),启动时提示bind 80端口失败 检查端口占用: netstat -ano | findstr 0.0.0.0:80 发现System进程 (pid=4) ...

  4. AngularJS常用指令用法详解

    ng-class 1>ng-init   ng-bind 11111 2>ng-class 111 3>ng-repeat 3.1-数据绑定     ng-repeat可以绑定数组和 ...

  5. JQ nextALL() 实现遍历

    在我们的 手机端 常常需要 应用到 hide 和 show 的方法 来节省页面的版块 那么我们需要更多的是 需要 show 一个 <li>  hide 剩下的 <li> 那么 ...

  6. java的集合框架最全详解

    java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...

  7. systemd

    本文参照:https://wiki.archlinux.org/index.php/Systemd#Basic_systemctl_usage 做了翻译和整理 systemd是Linux下的一种ini ...

  8. iOS:项目中疑难Crash问题集锦

    项目中疑难Crash问题集锦 iOS App运行中遇到Crash的情况相信大家都遇到过,开发和者测试中遇到了可能很方便的办法就是直接拿着设备连接一下,然后使用Xcode自带的工具就可以解析出Crash ...

  9. ACM3 求最值

    /*2*2014.11.18*求最值*描述:给定N个整数(1<=N<=100),求出这N个数中的最大值,最小值.*输入:多组数据,第一行为一个整数N,第二行为N个不超过100的正整数,用空 ...

  10. Effective Java 读书笔记之九 并发

    一.访问共享的可变数据时要同步 1.synchronized关键字既然保证访问的可见性也能保证原子性.而volatile修饰符只能保证变量的线程可见性. 2.增量操作符等不是原子性,多线程操作时可能导 ...