分析

首先声明一下,我的代码有漏洞的,求大神给个正确代码

思路如下:

首先做一遍01背包记录路径并求出最大总分,令path[i][j]表示第i个物品包含在dp[j]的求值过程中.再逆序枚举money,如果dp[money]为最大总分,那么用c[num][j]保存物品并排序,并用mark记录序号最小并且字典序最小的那一个num,最后对c[mark][1]~c[mark][c[mark][0]]处理即可

trick

但是有一组数据很奇怪啊

5 4 1 1 2 2 3 3 4 4,应该输出5 5 1 4,但是我的程序输出5 5 2 3,然后我修改了if(dp[j]<dp[j-cost[i]]+score[i])if(dp[j]<=dp[j-cost[i]]+score[i]),输出对了,交上去wa了,求一个正确代码

#include <bits/stdc++.h>
using namespace std; #define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define mem(a,b) memset(a,b,sizeof(a)) int t;
int money,n;
int cost[111],score[111];
int dp[1010];
int path[1010][1010];//path[i][j]表示第i个物品包含在dp[j]的求值过程中
int c[1010][1010];
int maxscore,maxsum; int check(int num,int mark)
{
int cnt1=c[num][0],cnt2=c[mark][0];
for(int i=1,j=1;i<=cnt1&&j<=cnt2;++i,++j) if(c[num][i]!=c[mark][j]) return c[num][i]-c[mark][j];
return 0;
} int main()
{
scanf("%d",&t);
F(qq,1,t)
{
scanf("%d%d",&money,&n);
F(i,1,n) scanf("%d %d",score+i,cost+i);
mem(dp,0);mem(path,0); F(i,1,n)
{
for(int j=money;j>=cost[i];j--)
{
if(dp[j]<dp[j-cost[i]]+score[i])
{
path[i][j]=1;
dp[j]=dp[j-cost[i]]+score[i];
}
}
}
maxscore=dp[money];
int num=0,mark=0;
maxsum=1e9;
for(int j=money;j>=0;--j) if(dp[j]==maxscore)
{
int cnt=0,k=j,sum=0;//序号和
for(int i=n;i>=1&&k>=0;i--) if(path[i][k])
{
c[num][++cnt]=i;
k-=cost[i];
sum+=i;
}
c[num][0]=cnt;
sort(c[num]+1,c[num]+1+cnt);
if(maxsum>sum)
{
maxsum=sum;
mark=num;
}
else if((maxsum==sum)&&check(num,mark)<0) mark=num;
++num;
}
int maxcost=0,cnt=c[mark][0];
F(i,1,cnt) maxcost+=cost[c[mark][i]];
printf("Case #%d:\n",qq );
printf("%d %d\n",maxscore,maxcost );
F(i,1,cnt) printf("%d%c",c[mark][i],i==cnt?'\n':' ' );
}
return 0;
}

百度之星资格赛 1004 度度熊的午饭时光(01背包+最小序号和+字典序+有bug)的更多相关文章

  1. 百度之星 资格赛 1003 度度熊与邪恶大魔王 dp(背包)

    度度熊与邪恶大魔王  Accepts: 1141  Submissions: 6840  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 3 ...

  2. 百度之星资格赛 1003 度度熊与邪恶大魔王(二维dp)

    分析 挺好的一道题 dp[i][j]表示打败i颗血j防御力的怪兽需要的最少宝石数 然后就好了,复杂度\(O(n+m*1000*10)\) #include <bits/stdc++.h> ...

  3. 2014百度之星资格赛 1004:Labyrinth(DP)

    Labyrinth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  4. HDU 6118 2017百度之星初赛B 度度熊的交易计划(费用流)

    度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  5. HDU - 6113 2017百度之星初赛A 度度熊的01世界

    度度熊的01世界  Accepts: 967  Submissions: 3064  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 327 ...

  6. ACM学习历程—BestCoder 2015百度之星资格赛1004 放盘子(策略 && 计算几何)

    Problem Description 小度熊喜欢恶作剧.今天他向来访者们提出一个恶俗的游戏.他和来访者们轮流往一个正多边形内放盘子.最后放盘子的是获胜者,会赢得失败者的一个吻.玩了两次以后,小度熊发 ...

  7. HDU 6083 度度熊的午饭时光(01背包+记录路径)

    http://acm.hdu.edu.cn/showproblem.php?pid=6083 题意: 思路: 01背包+路径记录. 题目有点坑,我一开始逆序枚举菜品,然后一直WA,可能这样的话路径记录 ...

  8. 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)

    .navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...

  9. 2016百度之星 资格赛ABCDE

    看题:http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=690 交题:http://acm.hdu.edu.cn/search.php ...

随机推荐

  1. centos 7 安装官方LAMP(Apache+PHP5+MySQL)

    启用Apache2 yum install httpd systemctl start httpd.service systemctl status httpd systemctl enable ht ...

  2. A002-开发工具介绍

    关于Android的开发工具有非常多,基本上都能够在SDK中找到.下面我们逐个来看一下: 首先我们使用的是Java语言进行Android应用的开发,那么Java的执行环境是少不了的了,我们须要在我们的 ...

  3. three.js 源代码凝视(十五)Math/Plane.js

    商域无疆 (http://blog.csdn.net/omni360/) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:商域无疆 -  本博客专注于 敏捷开发 ...

  4. 双向队列(STL做法)

    双向队列 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 想想双向链表--双向队列的定义差点儿相同,也就是说一个队列的队尾同一 ...

  5. VirtualBox中使用双网卡实现CentOS既能上网(校园网)也能使用SSHclient

    近期在虚拟机中使用linux操作系统,之前使用NAT方式上网,能够畅通无阻.可是使用SSHclient连接linux虚拟机就必须为其指定固定的IP地址.依照网上的配置方法使用桥接方式,这种方式是能够的 ...

  6. 【万里征程——Windows App开发】控件大集合1

    加入控件的方式有多种.大家更喜欢哪一种呢? 1)使用诸如 Blend for Visual Studio 或 Microsoft Visual Studio XAML 设计器的设计工具. 2)在 Vi ...

  7. Posix消息队列相关函数

    Posix消息队列(message queue) IPC函数中常用的参数取值: 打开或创建POSIX IPC对象所用的各种oflag常值o_RDONLY   只读O_WRONLY   只写O_RDWD ...

  8. JfreeChart折线图 CSDN-李鹏飞

    今天公司里分配给我的工作是JfreeChart折线图本人之前也没接触过如今让我们大家一起完毕! 在这个公司,用到了太多的JfreeChart,今天就对折线图作一个总结,希望对大家有点帮助,我这里直接是 ...

  9. fruitstrap 安装.app文件

    1. 下载ipa的ios文件然后解压成.app的文件 2. 进入fruitstrap文件夹,copy .app文件到fruitstrap文件夹中 执行./fruitstrap -b umetrip.a ...

  10. WebService:JAX-WS实现WebService

    WebService和Java核心技术中的RMI一样用于实现异构平台上的应用程序之间数据的交互,唯一不同的是这样的技术屏蔽了语言之间的差异.这也是其大行其道的原因. 实现WebService的技术多种 ...