vijosP1071 新年趣事之打牌

链接:https://vijos.org/p/1071

【思路】

01背包+路径输出。

用d[][]记录[][]可转移的数目,>=2则输出-1,0输出0,否则输出路径。对于路径可以写一个递归过程print完成。

本题的数据着实有些坑,需要注意的有数组的范围,使用LL。题目中为什么没有交待?

【代码】

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4
 5 const int maxn = 300+10;
 6
 7 typedef long long LL;
 8 LL d[maxn][200100];
 9 LL a[maxn];
10 LL n,W;
11
12 void print(LL n,LL w) {
13     if(n<=0 || !w) return ;
14     if(d[n-1][w]) {
15         print(n-1,w);
16     }
17     else{
18         print(n-1,w-a[n]);
19         cout<<n<<" ";
20     }
21 }
22
23 int main() {
24     ios::sync_with_stdio(false);
25     cin>>W>>n;
26     LL sum=0;
27     for(int i=1;i<=n;i++) cin>>a[i] , sum+=a[i];
28     W=sum-W;
29     for(int i=0;i<=n;i++) d[i][0]=1;
30     for(int i=1;i<=n;i++)
31        for(int j=0;j<=W;j++)
32         {
33             d[i][j] = d[i-1][j]+d[i-1][j-a[i]];
34         }
35
36     if(!d[n][W]) cout<<0;
37     else
38       if(d[n][W]>=2) cout<<-1;
39     else {
40         print(n,W);
41     }
42     return 0;
43 }
时间: 2024-10-25 08:25:53

vijosP1071 新年趣事之打牌的相关文章

vijos p1071新年趣事之打牌

描述 过年的时候,大人们最喜欢的活动,就是打牌了.xiaomengxian不会打牌,只好坐在一边看着. 这天,正当一群人打牌打得起劲的时候,突然有人喊道:“这副牌少了几张!”众人一数,果然是少了.于是这副牌的主人得意地说:“这是一幅特制的牌,我知道整副牌每一张的重量.只要我们称一下剩下的牌的总重量,就能知道少了哪些牌了.”大家都觉得这个办法不错,于是称出剩下的牌的总重量,开始计算少了哪些牌.由于数据量比较大,过了不久,大家都算得头晕了. 这时,xiaomengxian大声说:“你们看我的吧!”于

新年趣事之打牌(01背包+唯一路径)

过年的时候,大人们最喜欢的活动,就是打牌了.蒜头君不会打牌,只好坐在一边看着. 这天,正当一群人打牌打得起劲的时候,突然有人喊道: "这副牌少 了几张!”众人一数,果然是少了.于是这副牌的主人得意地说: "这是一幅特制的牌,我知道整副牌每一张的重量. 只要我们称一下剩下的牌的总重量,就能知道少了哪些牌了.”大家都觉得这个办法不错,于是称出剩下的牌的总重量,开始计算少了哪些牌.于数据量比较大,过了不久,大家都算得头晕了. 这时,蒜头君大声说:“你们看我的吧! ”于是他拿出笔记本电脑,编出

VJ 1069 新年趣事之红包

描述 xiaomengxian一进门,发现外公.外婆.叔叔.阿姨……都坐在客厅里等着 他呢.经过仔细观察,xiaomengxian发现他们所有人正好组成了一个凸多边形.最重要的是,他们每个人手里都拿着一个红包(^o^).于是非常心 急,xiaomengxian决定找一条最短的路线,拿到所有的红包. 假设屋里共有N个人拿着红包,把他们分别从1到N编号.其中,编号为1的人就坐在大门口,xiaomengxian必须从这里出发去拿其它的红包.一条合法的路线必须经过所有的点一次且仅一次. 格式 输入格式

SCOI2009游戏

1025: [SCOI2009]游戏 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1065  Solved: 673[Submit][Status] Description windy学会了一种游戏.对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,……,N写一排在纸上.然后再在这一排下面写上它们对应的数字.然后又在新的一排下面写上它们对应的数字.如此反复,直到序列再次变为1,2,3,……,N.

OI每周刷题记录

2017.8.7 [线段树] codevs 1080 1081 1082 线段树练习 线段树练习2 线段树练习3 vijos1066 弱弱的战壕 hdu1166 敌兵布阵 [模拟] vijos1066 弱弱的战壕 [动态规划] vijos1071 新年趣事之打牌 福建师范大学附属中学oj1290 寻找牧场 poj3046 Ant Counting poj2718 Smallest Difference [离散化] poj 1177 Picture [高精度]HazeOJ#17 A+B++

[SinGuLaRiTy] 动态规划题目复习

[SinGuLaRiTy-1026] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. [UVA 1025] A Spy in the Metro 题目描述 特工玛利亚被送到S市执行一个特别危险的任务.她需要利用地铁完成他的任务,S市的地铁只有一条线路运行,所以并不复杂. 玛利亚有一个任务,现在的时间为0,她要从第一个站出发,并在最后一站的间谍碰头.玛利亚知道有一个强大的组织正在追踪她,她知道如果一直呆在一个车站,她会有很大的被抓的风险,躲

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

2015-2016年终总结及新年计划

今天是12月28日,再有3天就到2017年了,离2020实现社会主义又近了一年,想想都高兴,在过去的一年里有开心也有不开心,不过高兴不高兴又是一年,回头看过去的一年有收获也有失去. 2015年终总结 1.工作 在工作上从IOS转到了C#,想起从IOS转C#,可能有很多因素导致自己又转回C#.一是公司原因之前的公司待遇比现在的高,但是每天加班到9点,周六也要加班,每天5点半的时候就要点饭了,连着干了两个月看不到尽头,而且公司氛围不是自己喜欢的氛围,老人欺负新人,官僚气息严重,可能还是自己too y

怎样设定目标(七)号召:使我的新年目标成功!

是时候开始规划我的新年目标了吗? 我想,每当大家走到旧一年快要结束时,你脑海中又重现了这个问题--是时候开始规划我的新年目标了吗?说句实话,我们承受了太多的失败,以往这个时候你也计划了新一年的目标,可结果总是不了了之.或许你已经认为新年目标不过是个愿望而已,它根本就不管用!年复一年,不出几个月不是忘得干干净净,就是一甩便放弃了. 为什么新年目标看起来不成功? 想像一下:在年终庆祝会上,一位好友蹭了过来跟你聊天:"你明年有什么打算?"你根本就还没有认真地考虑过,所以只好含糊地回答:&qu