Stock Charts(Google Code Jam 2009 Round2 C)二分图最大匹配
来源:互联网 发布:阿里云机顶盒刷机固件 编辑:程序博客网 时间:2024/04/30 13:06
1.题目原文
You're in the middle of writing your newspaper's end-of-year economics summary, and you've decided that you want to show a number of charts to demonstrate how different stocks have performed over the course of the last year. You've already decided that you want to show the price of n different stocks, all at the same k points of the year.
A simple chart of one stock's price would draw lines between the points (0, price0), (1, price1), ... , (k-1, pricek-1), where pricei is the price of the stock at the ith point in time.
In order to save space, you have invented the concept of an overlaid chart. An overlaid chart is the combination of one or more simple charts, and shows the prices of multiple stocks (simply drawing a line for each one). In order to avoid confusion between the stocks shown in a chart, the lines in an overlaid chart may not cross or touch.
Given a list of n stocks' prices at each of k time points, determine the minimum number of overlaid charts you need to show all of the stocks' prices.
Input
The first line of input will contain a single integer T, the number of test cases. After this will follow T test cases on different lines, each of the form:
n kprice0,0 price0,1 ... price0,k-1price1,0 price1,1 ... price1,k-1...pricen-1,0 pricen-1,1 ... pricen-1,k-1
Where pricei,j is an integer, the price of the ith stock at time j.
Output
For each test case, a single line containing "Case #X: Y", where X is the number of the test-case (1-indexed) and Y is the minimum number of overlaid charts needed to show the prices of all of the stocks.
Limits
1 ≤ T ≤ 100
2 ≤ k ≤ 25
0 ≤ pricei,j ≤ 1000000
Small Input
1 ≤ n ≤ 16
Large Input
1 ≤ n ≤ 100
Sample
2.解题思路
3.AC代码
#include <algorithm>#include <cctype>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iomanip>#include <iostream>#include <map>#include <queue>#include <string>#include <set>#include <vector>using namespace std;#define maxk 30#define maxn 105#define MAX_V 205int N,K;int P[maxn][maxk];//二分图匹配模板int V;//顶点数vector<int> G[MAX_V];//图的邻接表表示int match[MAX_V];//所匹配的顶点bool used[MAX_V];//DFS中用到的访问标记//向图中增加一条连接u和v的边void add_edge(int u,int v){ G[u].push_back(v); G[v].push_back(u);}//通过DFS寻找增广路bool dfs(int v){ used[v]=true; for(int i=0;i<G[v].size();i++){ int u=G[v][i],w=match[u]; if(w<0||!used[w]&&dfs(w)){ match[v]=u; match[u]=v; return true; } } return false;}//求解二分图的最大匹配int bipartite_matching(){ int res=0; memset(match,-1,sizeof(match)); for(int v=0;v<V;v++){ if(match[v]<0){ memset(used,0,sizeof(used)); if(dfs(v)){ res++; } } } return res;}//二分图匹配模板void solve(){ V=N*2; for(int i=0;i<V;i++){ G[i].clear(); } for(int i=0;i<N;i++){ for(int j=0;j<N;j++){ if(i==j) continue; bool ok=true; for(int k=0;k<K;k++){ if(P[j][k]>=P[i][k]){ ok=false; } } if(ok){ add_edge(i,N+j); } } } int ans=N-bipartite_matching(); printf("%d\n",ans);}int main(){ freopen("C-large-practice.in","r",stdin); freopen("C-large-practice.out","w",stdout); int t,kase=0; scanf("%d",&t); while(t--){ scanf("%d%d",&N,&K); for(int i=0;i<N;i++){ for(int k=0;k<K;k++){ scanf("%d",&P[i][k]); } } printf("Case #%d: ",++kase); solve(); } return 0;}
- Stock Charts(Google Code Jam 2009 Round2 C)二分图最大匹配
- Google Code Jam 2009 Round2 A (脑洞题)
- Google Code Jam 2016 Round2
- No Cheating(Google Code Jam 2008 Round 3C)二分图最大独立集
- Google Code Jam Round2 A,B题解
- 【Google Code Jam 2009 round2 problem D】Watering Plants (两圆交点求法详解)
- google code jam 2009 round1 c
- Google Code Jam 2014 -- C
- Google Code Jam 2009资格赛 题目C Welcome to Code Jam
- Google Code Jam Round2 题解报告 Problem A.Cheating a Boolean Tree
- 2009 Google Code Jam Round 1C 题解
- Google Code Jam round 1C总结
- google code jam 2015 C. Dijkstra
- Code Jam 2009 Round2 Problem A. Crazy Rows —— 贪心
- google code jam 2009资格赛(pass)
- Google Code Jam 2009 资格赛题目A
- google code jam 2009 解题报告
- 2009 Google Code Jam Qualification Round 题解
- 用于快餐行业的自动化餐厅系统构想
- QTableView,Model/View的运用(1),QAbstractTableModel
- Sicily 1001 Alphacode
- HDU 3294 Girl's research(最长回文子串)
- 数据库的关系运算
- Stock Charts(Google Code Jam 2009 Round2 C)二分图最大匹配
- 【No13】黑马安卓52期视频下载 共64.2G 视频教程下载
- 长沙培训杂记d
- Shell 脚本
- tianchai 12032 解救小哈(DFS或者BFS模版)
- 使用sklearn做单机特征工程
- duilib最新的SVN地址
- 初识CSS
- 【No14】多套 传智播客UI视频完整版 下载