UVA565
来源:互联网 发布:淘宝买电动车可靠吗 编辑:程序博客网 时间:2024/06/11 04:35
题目的意思就是你要去买披萨,你的每个朋友都有自己的想吃的东西和不想吃的东西。。
然后你必须满足每个朋友至少一个要求。
问买回来的披萨里面有什么。没有符合的就输出no啥啥。
这题我用了枚举,把 2 的17 次方 - 1种情况枚举了一边 ,但是超时;
后来我把朋友朋友要求的数量排了个序,要求少的排前面。(因为要求少的最有可能无法满足,就能直接进入下一种情况)
跑了2399ms 很悬,看了别人的都是用回溯 + 剪枝 ,会比我快不少。
还有就是题目明明说朋友只有12个,我开12 RE了,开了100过。
AC代码:
#include<iostream>#include<string>#include<algorithm>using namespace std;int conti[100][16];int judge[16];int num;bool fin;int cmp (string a ,string b){return a.size() < b.size();}void init() {for (int i = 0 ; i < 100 ;i++ ) {for (int j = 0 ; j < 16 ;j++) {conti[i][j] = -1;}}fin = false;}bool compare () {bool ok = false;for (int i = 0 ; i < num ;i++) {for (int j = 0 ; j < 16 ; j++) {if (conti[i][j] == judge[j]) break;if (j == 15)return false;}}return true;}int main () {string temp[100];num = 0;init();while (cin >> temp[0]){num = 0;init();while(temp[num][0] != '.') {cin >> temp[++num];}sort(temp , temp + num ,cmp);//for (int i = 0 ; i < num ;i++ ) {//cout << temp[i] <<endl;//}for (int i = 0 ; i < num ;i++) {for (int j = 0 ; j < temp[i].size() - 1 ;j++) {if (temp[i][j] == '+')conti[i][temp[i][j + 1] - 'A'] = 1;if (temp[i][j] == '-')conti[i][temp[i][j + 1] - 'A'] = 0;}}for (int i = 0 ; i < (1 << 16) ;i++) {for (int k = 0 ; k < 16 ;k++) {if (i & (1 << k))judge[k] = 1;elsejudge[k] = 0;}if(compare()) {fin = true;cout << "Toppings: ";for (int j = 0 ; j < 16 ;j++) {if (judge[j] == 1)cout << char(j + 'A');}cout << endl;break;}}if (fin == false)cout << "No pizza can satisfy these requests."<<endl;num = 0;}return 0;}
0 0
- UVA565
- UVA565订披萨,每个人提几个条件,至少满足每个人的一个条件的方案
- 【git学习三】git基础之git管理远程仓库
- 黑马程序员-iOS学习日记(一)OC基本语法
- C语言一个二叉树的实现
- 写出优化的ARM架构上的C代码
- Struts2 - 属性驱动与模型驱动
- UVA565
- hdu1563Find your present
- 通过nexus添加第三方jar包
- java学习笔记3
- 云计算、物联网的意义在于收集和处理数据,目前需集中发展IaaS和建设高速宽带
- 管理自己的导师,管理自己的老板
- android中gridview的居中问题
- 阿里云Ubuntu系统搭建SVN服务器
- Java集合类Map之Map与AbstractMap