dfs

代码:

#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,p,q,ans1,ans2,len;
int ans[35],sum[35];
bool ok[35];
struct haochi
{
int zl,jg,ctb;
int tot,dr[35];
friend bool operator < (const haochi &x,const haochi &y)
{ return x.zl<y.zl; }
}yu[35];
void dfs(int hao,int lei,int qian)
{
if(qian>m)return;
if(hao==n+1)
{
if((lei>ans1)||(lei==ans1&&qian>ans2))
{
len=0;
for(int i=1;i<=n;++i)
if(ok[i])ans[++len]=i;
ans1=lei;
ans2=qian;
}
return;
}
if(lei+(n-hao+1)<ans1 || (lei+(n-hao+1) ==ans1 && qian+sum[hao]<=ans2))return;
if(yu[hao].ctb)
{
dfs(hao+1,lei,qian);
return;
}
ok[hao]=1;
for(int i=1;i<=yu[hao].tot;++i)yu[yu[hao].dr[i]].ctb++;
dfs(hao+1,lei+1,qian+yu[hao].jg);
ok[hao]=0;
for(int i=1;i<=yu[hao].tot;++i)yu[yu[hao].dr[i]].ctb--; dfs(hao+1,lei,qian);
}
int main()
{
freopen("fish.in","r",stdin);
freopen("fish.out","w",stdout);
cin>>m>>n;
for(int i=1;i<=n;++i) scanf("%d%d",&yu[i].zl,&yu[i].jg);
sort(yu+1,yu+1+n);
for(int i=n;i>=1;i--)sum[i]=sum[i+1]+yu[i].jg;
while(scanf("%d%d",&p,&q)&&p&&q)
{
yu[p].dr[++yu[p].tot]=q;
yu[q].dr[++yu[q].tot]=p;
}
dfs(1,0,0);
cout<<ans1<<" "<<ans2<<endl;
for(int i=1;i<=len;i++)printf("%d\n",ans[i]);
fclose(stdin);fclose(stdout);
return 0;
}
/*
170 7
1 70
2 50
3 30
4 40
5 40
6 30
7 20
1 4
1 7
3 4
3 5
5 7
6 7
0 0
*/

【csp模拟赛九】--dfs2的更多相关文章

  1. 【csp模拟赛九】--dfs3

    这道题贪心错误:直接dfs就行,枚举新开一个还是往之前的里面塞 贪心代码(80): #include<cstdio> #include<algorithm> #include& ...

  2. 【csp模拟赛九】--dfs

    思路: 这道题可以宽搜,深搜,最短路 代码: #include<cstdio> #include<cstring> #include<iostream> #incl ...

  3. CSP模拟赛游记

    时间:2019.10.5 考试时间:100分钟(连正式考试时间的一半还没有到)题目:由于某些原因不能公开. 由于第一次接触NOIinux系统所以连怎么建文件夹,调字体,如何编译都不知道,考试的前半小时 ...

  4. 【CSP模拟赛】Freda的迷宫(桥)

    题目描述 Freda是一个迷宫爱好者,她利用业余时间建造了许多迷宫.每个迷宫都是由若干房间和走廊构成的,每条走廊都连接着两个不同的房间,两个房间之间最多只有一条走廊直接相连,走廊都是双向通过.  黄昏 ...

  5. 【csp模拟赛6】树上统计-启发式合并,线段树合并

    30%:暴力 40%:枚举L,R从L~n枚举,R每增大一个,更新需要的边(bfs实现)60%:枚举每条边, 计算每条边的贡献另外20%的数据:枚举每条边,计算每条边的贡献100%:对于每一条边统计 有 ...

  6. CSP模拟赛2游记

    这次由于有课迟到30min,了所以只考了70min. 调linux配置调了5min,只剩下65min了. T1:有点像标题统计,但要比他坑一点,而且我就被坑了,写了一个for(int i=1;i< ...

  7. 【CSP模拟赛】Freda的旗帜

    题目描述  要开运动会了,Freda承担起了制作全校旗帜的工作.旗帜的制作方法是这样的:Freda一共有C种颜色的布条,每种布条都有无数个,你可以认为这些布条的长.宽.厚都相等,只有颜色可能不同.每个 ...

  8. 【csp模拟赛4】基站建设 (station.cpp)

    [题目描述] 小 Z 的爸爸是一位通信工程师,他所在的通信公司最近接到了一个新的通 信工程建设任务,他们需要在 C 城建设一批新的基站. C 城的城市规划做得非常好,整个城市被规整地划分为 8 行 8 ...

  9. 【CSP模拟赛】starway(玄学建边 最小生成树)

    问題描述 小w伤心的走上了 Star way to heaven.   到天堂的道路是一个笛卡尔坐标系上一个n×m的长方形通道(顶点在(0,0))和(n,m)),小w从最左边任意一点进入,从右边任意一 ...

随机推荐

  1. Python完成迪杰斯特拉算法并生成最短路径

    def Dijkstra(network,s,d):#迪杰斯特拉算法算s-d的最短路径,并返回该路径和代价 print("Start Dijstra Path……") path=[ ...

  2. libhura的建立

    libharu 是一个开源的导出pdf的库,在编译libharu需要用到zlib库和libpng库(libpng 依赖于zlib库).如果项目中不需要导出带有图片的pdf,可以将涉及到"pn ...

  3. sqlserver exists 与 in 的区别

    使用 EXISTS 方式 select * from A  a where EXISTS(select b.mainInfoId from B b  where b.mainInfoId=a.main ...

  4. hdu 2822 ~!!!!!!坑死我

    首先 在此哀悼...  为我逝去的时间哀悼...  每一步都确定再去写下一步吧...日狗 不过还是有点收获的..  对优先队列的使用 有了进一步的理解 先上代码 #include<iostrea ...

  5. Effective Java 读书笔记(五):Lambda和Stream

    1 Lamdba优于匿名内部类 (1)DEMO1 匿名内部类:过时 Collections.sort(words, new Comparator<String>() { public in ...

  6. 利用python爬取王者荣耀英雄皮肤图片

    前两天看到同学用python爬下来LOL的皮肤图片,感觉挺有趣的,我也想试试,于是决定来爬一爬王者荣耀的英雄和皮肤图片. 首先,我们找到王者的官网http://pvp.qq.com/web201605 ...

  7. git一些简单运用

    1.删除本地文件后,继续从远处仓库拉取回来,提示up-to-date,执行如下 git reset --hard origin/master 待补充

  8. Jlink调试S5PV210

    安装CDT C/C++ Development Toolkit,使eclipse可以开发C/C++项目 Help–>Install New Software中输入:http://download ...

  9. LNMP环境搭建之编译安装指南(php-5.3.27.tar.gz)

    测试环境:CentOS release 6.5 (Final) 软件安装:nginx   mysql-5.5.32-linux2.6-x86_64.tar.gz   php-5.3.27.tar.gz ...

  10. 【DRF框架】序列化组件——ModelSerializer

    ModelSerializer 1.ModelSerializer类似于ModelForm 2.根据模型自动生成一组字段 3.自带实现了.update()以及.create()方法 ModelSeri ...