模拟题 day3
出题人: liu_runda题目名称 摆渡 摆车 背包源程序文件名 boat.cpp ju.cpp pack.cpp输入文件名 boat.in ju.in pack.in输出文件名 boat.out ju.out pack.out每个测试点时限 1s 1s 1s内存限制 512MB 512MB 512MB测试点数目 10 10 10每个测试点分值 10 10 10是否打开O2 优化 是 是 是在windows 下用lemon 进行测试.摆渡(boat)【题目描述】民国时期,在湘西有一位老人摆渡为生.水道不复杂,也不简单,有n 个渡口,m 条河流连接不同的渡口.每条河流都可以双向通行,用时也相同.摆渡的收费是很特别的.基本费用是按照路程来算.如果总路程为L,就会收取基本费用L.附加费用是按照经过的渡口的凶险程度来计算,而且只考虑经过的渡口(包括出发的渡口和终点的渡口)中凶险程度最大的渡口.如果经过的渡口中凶险程度最大为M,就会收取附加费用M收取的总费用为L+M.现在有q 次摆渡,给出每次的起点和终点,问每次摆渡的最少收费是多少.【输入格式】第一行三个整数n,m,q接下来一行n 个数字,依次表示n 个渡口的凶险程度v接下来m 行,每行三个数字a,b,w 表示渡口a,b 之间有一条长度为w 的河道.接下来q 行,每行两个数字u,v 表示一次摆渡的起点和终点【输出格式】q 行,每行一个整数表示最少的收费.【样例输入】5 5 21 2 3 4 51 2 12 3 23 4 34 5 45 1 54 12 5【样例输出】1011【数据范围】第1,2,3 个测试点,所有渡口的凶险程度相同第4,5,6 个测试点,所有渡口的凶险程度从1 到n 单调不下降所有数据,n<=300,m<=40000,1<=a,b,u,v<=n,u!=v,a!=b,1<=w<=109.同一对渡口之间可能连有多条河道.摆车(ju)【题目描述】liu_runda 从前很喜欢下象棋.象棋中的车是很厉害的棋子,如果一个车和另外一个棋子位于同一行或者同一列,而两个棋子之间又没有其他棋子,车就可以攻击到那个棋子.现在liu_runda 有一个n 行m 列的棋盘,上面有一些地方摆上了不是车的棋子.他想知道,怎样才能在棋盘上尽量多地放置车,并使得它们互相之间不攻击?也就是说,怎样才能选择若干个格子放置车,使得同一行/同一列放置车的位置之间都隔有其他棋子?【输入格式】第一行,三个数字n,m,q,分别表示行数,列数和已经摆放的不是车的棋子数目接下来q 行,每行两个数字a,b,表示a 行b 列放置了一个不是车的棋子.保证这q 个位置各不相同.【输出格式】一行一个整数,表示棋盘上最多能放车的个数.【样例输入】3 3 12 2【样例输出】4【数据范围】第1 个测试点,n=1第2 个测试点,q=0第3,4,5 个测试点,n*m<=16对所有的测试点,n<=50,m<=50,q<=1000背包(pack)【题目描述】给出n 个物品,每个物品有重量w[i]和价值v[i]两种属性.现在要求选出重量不超过m 的物品,使得物品的价值之和最大.【输入格式】第一行两个整数n,m 表示物品个数和重量的限制接下来n 行第i 行两个整数w[i]和v[i],表示第i 种物品的重量和价值【输出格式】一行一个整数表示能够获得的最大价值【样例输入】3 54 52 43 4【样例输出】8【数据范围】第1,2,3 个测试点,n<=20,m<=109,w[i]<=109,v[i]<=109第4,5,6,7 个测试点,n<=500,m<=500,w[i]<=109,v[i]<=109第8,9,10 个测试点,n<=500,m<=109,w[i]<=109,v[i]<=10
1 #include2 #include 3 #include 4 #include 5 #include 6 //#include 7 //#include 8 #include 9 #include 10 #include 11 #define INF (1LL<<60)12 #define re register13 #define Ii inline int14 #define Il inline long long15 #define Iv inline void16 #define Ib inline bool17 #define Id inline double18 #define ll long long19 #define Fill(a,b) memset(a,b,sizeof(a))20 #define R(a,b,c) for(register int a=b;a<=c;++a)21 #define nR(a,b,c) for(register int a=b;a>=c;--a)22 #define Min(a,b) ((a)<(b)?(a):(b))23 #define Max(a,b) ((a)>(b)?(a):(b))24 #define Cmin(a,b) ((a)=(a)<(b)?(a):(b))25 #define Cmax(a,b) ((a)=(a)>(b)?(a):(b))26 #define abs(a) ((a)>0?(a):-(a))27 #define D_e(x) printf("&__ %d __&\n",x)28 #define D_e_Line printf("-----------------\n")29 #define Pause system("pause");30 const int N=305;31 using namespace std;32 Ii read(){33 int s=0,f=1;char c;34 for(c=getchar();c>'9'||c<'0';c=getchar())if(c=='-')f=-1;35 while(c>='0'&&c<='9')s=s*10+(c^'0'),c=getchar();36 return s*f;37 }38 Iv print(ll x){39 if(x<0)putchar('-'),x=-x;40 if(x>9)print(x/10);41 putchar(x%10^'0');42 }43 int hurt[N],seq[N];44 ll dis[N][N],ans[N][N];45 Ib cmp(const int &a,const int &b){46 return hurt[a]
1 #include2 #include 3 #include 4 #include 5 #include 6 //#include 7 //#include 8 #include 9 #include 10 #include 11 #define INF (1ll<<60)12 #define re register13 #define Ii inline int14 #define Il inline long long15 #define Iv inline void16 #define Ib inline bool17 #define Id inline double18 #define ll long long19 #define Fill(a,b) memset(a,b,sizeof(a))20 #define R(a,b,c) for(register int a=b;a<=c;++a)21 #define nR(a,b,c) for(register int a=b;a>=c;--a)22 #define Min(a,b) ((a)<(b)?(a):(b))23 #define Max(a,b) ((a)>(b)?(a):(b))24 #define Cmin(a,b) ((a)=(a)<(b)?(a):(b))25 #define Cmax(a,b) ((a)=(a)>(b)?(a):(b))26 #define abs(a) ((a)>0?(a):-(a))27 #define D_e(x) printf("&__ %d __&\n",x)28 #define D_e_Line printf("-----------------\n")29 #define Pause system("pause");30 const int N=505;31 using namespace std;32 Ii read(){33 int s=0,f=1;char c;34 for(c=getchar();c>'9'||c<'0';c=getchar())if(c=='-')f=-1;35 while(c>='0'&&c<='9')s=s*10+(c^'0'),c=getchar();36 return s*f;37 }38 Iv print(ll x){39 if(x<0)putchar('-'),x=-x;40 if(x>9)print(x/10);41 putchar(x%10^'0');42 }43 int a[N][N],b[N][N],tot,head[N*N<<1],tim,vis[N*N<<1],match[N*N<<1];44 vector V[N<<1];45 Ib Hungary(int u){46 for(vector ::iterator v=V[u].begin();v!=V[u].end();++v)47 if(vis[*v]!=tim){48 vis[*v]=tim;49 if(!match[*v]||Hungary(match[*v])){50 match[*v]=u;return 1;51 }52 }53 return 0;54 }55 int mp[N][N];56 int main(){57 //freopen("ju.in","r",stdin),freopen("ju.out","w",stdout);58 int n=read(),m=read(),K=read();59 R(i,1,K)mp[read()][read()]=1;60 R(i,1,n)mp[i][0]=mp[i][m+1]=1;61 R(i,1,m)mp[0][i]=mp[n+1][i]=1;62 R(i,1,n)63 R(j,1,m)64 if(!mp[i][j])65 tot+=(mp[i][j-1]),66 a[i][j]=tot;67 int tot2=tot;68 R(j,1,m)69 R(i,1,n)70 if(!mp[i][j])71 tot2+=(mp[i-1][j]),72 b[i][j]=tot2;73 R(i,1,n)74 R(j,1,m)75 if(!mp[i][j])76 V[a[i][j]].push_back(b[i][j]);77 //V[b[i][j]].push_back(a[i][j]);78 int ans=0;79 R(i,1,tot)80 vis[i]=++tim,81 ans+=(Hungary(i));//ans+=(!match[i]&&Hungary(i));82 print(ans);83 return 0;84 }
1 #include2 #include 3 #include 4 #include 5 #include 6 //#include 7 //#include 8 #include 9 #include 10 #include 11 #define INF (1ll<<60)12 #define re register13 #define Ii inline int14 #define Il inline long long15 #define Iv inline void16 #define Ib inline bool17 #define Id inline double18 #define ll long long19 #define Fill(a,b) memset(a,b,sizeof(a))20 #define R(a,b,c) for(register int a=b;a<=c;++a)21 #define nR(a,b,c) for(register int a=b;a>=c;--a)22 #define Min(a,b) ((a)<(b)?(a):(b))23 #define Max(a,b) ((a)>(b)?(a):(b))24 #define Cmin(a,b) ((a)=(a)<(b)?(a):(b))25 #define Cmax(a,b) ((a)=(a)>(b)?(a):(b))26 #define abs(a) ((a)>0?(a):-(a))27 #define D_e(x) printf("&__ %d __&\n",x)28 #define D_e_Line printf("-----------------\n")29 #define Pause system("pause");30 const int N=205;31 using namespace std;32 Ii read(){33 int s=0,f=1;char c;34 for(c=getchar();c>'9'||c<'0';c=getchar())if(c=='-')f=-1;35 while(c>='0'&&c<='9')s=s*10+(c^'0'),c=getchar();36 return s*f;37 }38 Iv print(ll x){39 if(x<0)putchar('-'),x=-x;40 if(x>9)print(x/10);41 putchar(x%10^'0');42 }43 int n,m,c[505],w[505];44 ll sumc[1<<20],sumw[1<<20];45 Iv work1(){46 R(i,0,n-1)47 sumc[1< ans)ans=sumw[i];55 }56 print(ans),57 exit(0);58 }59 ll f[5005];60 Iv work2(){61 R(i,0,m)62 f[i]=0;63 R(i,1,n)64 nR(j,m,c[i])65 if(f[j-c[i]]+w[i]>f[j])66 f[j]=f[j-c[i]]+w[i];67 print(f[m]),68 exit(0);69 }70 Iv work3(){71 int sum=0;72 R(i,1,n)sum+=w[i];73 R(i,1,sum)f[i]=INF;74 R(i,1,n)75 nR(j,sum,w[i])76 if(f[j-w[i]]+c[i] %d, %d\n",i,i&-i,i^(i&-i));86 freopen("pack.in","r",stdin),freopen("pack.out","w",stdout);87 n=read(),m=read();88 R(i,1,n)89 c[i]=read(),w[i]=read();90 if(n<=20)work1();91 if(m<=500)work2();92 work3();93 return 0;94 }