ZOJ 3682 E - Cup 3
来源:互联网 发布:tensorflow源代码 编辑:程序博客网 时间:2024/05/16 12:49
题意: 有巴塞罗纳和马德里球迷s1,s2。同时有n个广场,每个广场能容纳一定的球迷。为了让比赛是和谐的,所以要分配两边的球迷入座这n个广场。对于单个广场,只有三中情况是和谐的:1.全是巴塞罗纳球迷 2.全是马德里球迷 3.各占一半 。当n个广场是和谐的时候,比赛就是和谐的了。问:使得比赛和谐的入座方案数是多少。
思路: 可以把人数看成容量,广场的容量看成花费。dp[i][j]表示前i个广场j个球迷的方案数,那么这就是一个01背包,但是有点不一样,它有三种转移,而且有一种转移要用到dp[i-1][v],所以不能像01背包那样优化到单纯的一维。但是可以用滚动数组,所以内存还是够的。
代码:
#include<stdio.h>#include<string.h>#include<algorithm>#define N 100100int square[220],dp[2][N];const int MOD=1000000007;int main(){using namespace std;int i,s1,s2,n,v,cur,pre;while(~scanf("%d %d %d",&s1,&s2,&n)){for(i=0;i<n;i++) scanf("%d",&square[i]);memset(dp,0,sizeof(dp));cur=0,pre=1;dp[cur][0]=1;for(i=0;i<n;i++){swap(cur,pre);memset(&dp[cur][0],0,(s1+1)*sizeof(dp[0][0]));for(v=0;v<=s1;v++){dp[cur][v]=(dp[cur][v]+dp[pre][v])%MOD;if(v>=square[i])dp[cur][v]=(dp[cur][v]+dp[pre][v-square[i]])%MOD;if(square[i]%2==0 && v>=square[i]/2)dp[cur][v]=(dp[cur][v]+dp[pre][v-square[i]/2])%MOD;}}printf("%d\n",dp[cur][s1]);}return 0;}
- ZOJ 3682 E - Cup 3
- ZOJ 3682 E - Cup 3
- [dp] zoj 3682 E - Cup 3
- ZOJ-3682-E - Cup 3【dp】
- ZOJ-3682 E - Cup 3 DP+01背包
- ZOJ 3681 E - Cup 2
- ZOJ 3681 E - Cup 2
- [ZOJ 3682] E - Cup 3 (背包DP计数 + 滚动数组)
- ZOJ-3681 E - Cup 2 dfs
- [记忆化搜索] zoj 3681 E - Cup 2
- ZOJ 3681E - Cup 2(记忆化dfs)不好读
- Canada Cup 2016 E
- VK Cup 2012 Finals E
- [线段树 杂题] Codeforces 806E VK Cup 2017 Round 3 E. Blog Post Rating
- [二分图 图的直径] Codeforces 542E VK Cup 2015 - Round 3 E.Playing on Graph
- intel CUP 的Q、E、P、T
- VK Cup 2012 Qualification Round 1 E
- Bubble Cup 9 - Finals E. 搜索
- [C/C++] Very very good !!! 句柄类
- java设计模式——代理模式
- 实现中文字串截取无乱码的方法
- [C/C++] C++ this 指针详解 [ c++中文网 ]
- Java Web UI框架 Brokenet-Xui发布
- ZOJ 3682 E - Cup 3
- struts2自定义局部类型转换器
- 内存相关(C/C++)基础知识
- ubuntu ssh install secret key
- android中listview的一些样式设置
- android开发环境搭建
- [C/C++] 第14章 重载操作符与转换 《C++ Primer》
- object-c中类,对象和方法
- 彻底理解PHP的SESSION机制