在一个10^9 * 10^9大的剧院里,有最多47个位子有人,然后有一对couple想找一对左右相邻的位子,问有多少种选择方式。
创新互联服务项目包括蟠龙网站建设、蟠龙网站制作、蟠龙网页制作以及蟠龙网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,蟠龙网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到蟠龙省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!思路:
总共有 n * (m-1)种方案,然后扣掉有人位置占掉的方案即可。
这里占掉位置我用一个set存储,正好可以去重。。
1 #line 7 "TheMoviesLevelOneDivOne.cpp"
2 #include <cstdlib>
3 #include <cctype>
4 #include <cstring>
5 #include <cstdio>
6 #include <cmath>
7 #include <algorithm>
8 #include <vector>
9 #include <string>
10 #include <iostream>
11 #include <sstream>
12 #include <map>
13 #include <set>
14 #include <queue>
15 #include <stack>
16 #include <fstream>
17 #include <numeric>
18 #include <iomanip>
19 #include <bitset>
20 #include <list>
21 #include <stdexcept>
22 #include <functional>
23 #include <utility>
24 #include <ctime>
25 using namespace std;
26
27 #define PB push_back
28 #define MP make_pair
29
30 #define REP(i,n) for(i=0;i<(n);++i)
31 #define FOR(i,l,h) for(i=(l);i<=(h);++i)
32 #define FORD(i,h,l) for(i=(h);i>=(l);--i)
33
34 typedef vector<int> VI;
35 typedef vector<string> VS;
36 typedef vector<double> VD;
37 typedef long long LL;
38 typedef pair<int,int> PII;
39
40
41 class TheMoviesLevelOneDivOne
42 {
43 public:
44 long long find(int n, int m, vector <int> row, vector <int> seat)
45 {
46 long long ans = n;
47 ans =ans * (m - 1);
48 set< PII > S;
49 for (int i = 0; i < row.size(); ++i){
50 if (seat[i] > 1) S.insert(make_pair(row[i], seat[i]));
51 if (seat[i] + 1 <= m) S.insert(make_pair(row[i], seat[i] + 1));
52 }
53 ans -= S.size();
54 return ans;
55 }
56
57 };
View Code500pt
题意:一个人看电影,该人有一个scare值,并且没看1min电影scare减1。有很多部恐怖电影,每部电影长度不同(length[i]),且每部都有一个瞬间增加scare(s[i])值的时刻。如果scare值小于0,则这个人就会睡着,不能再看电影。请问他安排一个电影观看顺序,使得他能看尽可能多的电影。如果有多组观看顺序看到的电影数相同,则输出字典序最小的。(电影数量小等于20)
思路:
状态压缩。。
1 #line 7 "TheMoviesLevelTwoDivOne.cpp"
2 #include <cstdlib>
3 #include <cctype>
4 #include <cstring>
5 #include <cstdio>
6 #include <cmath>
7 #include <algorithm>
8 #include <vector>
9 #include <string>
10 #include <iostream>
11 #include <sstream>
12 #include <map>
13 #include <set>
14 #include <queue>
15 #include <stack>
16 #include <fstream>
17 #include <numeric>
18 #include <iomanip>
19 #include <bitset>
20 #include <list>
21 #include <stdexcept>
22 #include <functional>
23 #include <utility>
24 #include <ctime>
25 using namespace std;
26
27 #define PB push_back
28 #define MP make_pair
29
30 #define REP(i,n) for(i=0;i<(n);++i)
31 #define FOR(i,l,h) for(i=(l);i<=(h);++i)
32 #define FORD(i,h,l) for(i=(h);i>=(l);--i)
33
34 typedef vector<int> VI;
35 typedef vector<string> VS;
36 typedef vector<double> VD;
37 typedef long long LL;
38 typedef pair<int,int> PII;
39 int dp[1 << 20];
40
41 class TheMoviesLevelTwoDivOne
42 {
43 public:
44 vector <int> find(vector <int> L, vector <int> scary)
45 {
46 int n = L.size();
47 memset(dp, 0, sizeof(dp));
48 for (int i = 1; i < (1 << n); ++i){
49 int level = 74;
50 for (int j = 0; j < n; ++j)
51 if (!(i & (1 << j))) level += 47 - L[j];
52 for (int j = 0; j < n; ++j) if (i & (1 << j))
53 if (level >= scary[j] && level + 47 - L[j] >= 0)
54 dp[i] = max(dp[i], dp[i ^ (1 << j)] + 1);
55 }
56 vector<int> ans;
57 int x = 74, mask = (1 << n) - 1;
58 while (mask > 0){
59 for (int i = 0; i < n; ++i) if (mask & (1 << i))
60 if (dp[mask] == 0 ||
61 (x >= scary[i] && x + 47 - L[i] >= 0 && dp[mask ^ (1 << i)] == dp[mask] - 1)){
62 ans.PB(i);
63 mask ^= (1 << i);
64 x += 47 - L[i];
65 break;
66 }
67 }
68 return ans;
69 }
70 };
View Code
分享文章:SRM469-创新互联
分享URL:https://www.cdcxhl.com/article4/dcseie.html
成都网站建设公司_创新互联,为您提供网站维护、动态网站、商城网站、微信公众号、服务器托管、移动网站建设
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联