分析

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

思路如下:

首先做一遍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. 递归获取JSON内容的key-value值

    方法主体: 使用时,请在类中先声明一个Map,參数形式例如以下: JSONObject jobj = new JSONObject(JSONContent); 首次请传递jobj.

  2. booth乘法器原理

    在微处理器芯片中,乘法器是进行数字信号处理的核心,同一时候也是微处理器中进行数据处理的wd=%E5%85%B3%E9%94%AE%E9%83%A8%E4%BB%B6&hl_tag=textli ...

  3. 【Mongodb教程 第十八课 】MongoDB常用命令 数据库命令 集合操作命令

    面向文档的 NoSQL 数据库主要解决的问题不是高性能的并发读写,而是保证海量数据存储的同时,具有良好的查询性能.  条件操作符 <, <=, >, >=  这个操作符就不用多 ...

  4. HDU 1028 Ignatius and the Princess III (母函数或者dp,找规律,)

    Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  5. TinyXML:属性

    TiXmlAttribute: 代表XML中的属性,TiXmlAttribute中定义了一系列对属性的操作 TiXmlAttribute的友元类: friend class TiXmlAttribut ...

  6. LeetCode(38)题解: Count and Say

    https://leetcode.com/problems/count-and-say/ 题目: The count-and-say sequence is the sequence of integ ...

  7. 智能停车O2O 独角兽初现:“ETCP停车”获5000万美金A轮融资

        日前,国内第一智能停车平台"ETCP停车"宣布完毕A轮融资,由源代码资本.SIG.易车网.经纬中国和商企界知名人士联合投资超过5000万美金.同一时候获悉,ETCP作为中国 ...

  8. sanic官方文档解析之ssl,debug mode模式和test(测试)

    1,ssl 示例: 可选择的SSLContent from sanic import Sanic import ssl context = ssl.create_default_context(pur ...

  9. Lambda Architecture

    Lambda Architecture » λ lambda-architecture.net http://lambda-architecture.net/ Twitter's tweets ana ...

  10. camus gobblin

    ####Camus is being phased out and replaced by Gobblin. For those using or interested in Camus, we su ...