bzoj 1306 match循环赛
2018-02-09 19:38
351 查看
Description
Input
第一行包含一个正整数n,队伍的个数。第二行包含n个非负整数,即每支队伍的得分。
Output
输出仅一行,即可能的分数表数目。保证至少存在一个可能的分数表。
Sample Input
6
5 6 7 7 8 8
Sample Output
121
HINT
N<=8
搜索,剪枝
时间压的真紧……
10028 ms也算过了
Input
第一行包含一个正整数n,队伍的个数。第二行包含n个非负整数,即每支队伍的得分。
Output
输出仅一行,即可能的分数表数目。保证至少存在一个可能的分数表。
Sample Input
6
5 6 7 7 8 8
Sample Output
121
HINT
N<=8
搜索,剪枝
时间压的真紧……
10028 ms也算过了
#include <iostream> #include <cstdio> #define For(i,l,r) for(int i=l;i<=r;++i) using namespace std; int n,a[9],b[9],ans,sco[]={3,1,0,0}; void dfs(int x,int y) { if(b[x]>a[x]) return; if((b[x]+3*(n-y+1))<a[x]) return; if(x==n) { ans++; return; } if(y==n) { int t=a[x]-b[x]; if(t==2) return; b[y]+=sco[t]; dfs(x+1,x+2); b[y]-=sco[t]; } else { b[x]+=3;dfs(x,y+1);b[x]-=3; b[y]+=3;dfs(x,y+1);b[y]-=3; b[x]++;b[y]++;dfs(x,y+1);b[x]--;b[y]--; } } int main() { scanf("%d",&n); For(i,1,n) scanf("%d",&a[i]); dfs(1,2); printf("%d",ans); return 0; }
相关文章推荐
- bzoj 1306 [CQOI2009]match循环赛
- BZOJ 1306: [CQOI2009]match循环赛 爆搜,剪枝
- bzoj 1306: [CQOI2009]match循环赛【dfs+剪枝】
- BZOJ 1306: [CQOI2009]match循环赛
- BZOJ 1306 match循环赛(搜索)
- 【BZOJ】【P1306】【CQOI2009】【match循环赛】【题解】【搜索+剪枝】
- 1306: [CQOI2009]match循环赛
- BZOJ1264: [AHOI2006]基因匹配Match
- [BZOJ1264][AHOI2006]Match(DP+树状数组)
- 【BZOJ1264】【AHOI2006】基因匹配Match (dp+树状数组)
- BZOJ 1264: [AHOI2006]基因匹配Match( LCS )
- 【BZOJ1264】[AHOI2006]基因匹配Match【DP】【LCS】【树状数组】
- BZOJ_1264_[AHOI2006]基因匹配Match_树状数组
- [bzoj1264][AHOI2006]基因匹配Match 树状数组优化dp
- BZOJ1264 [AHOI2006]基因匹配Match 【LCS转LIS】
- bzoj1264 [AHOI2006]基因匹配Match (树状数组优化DP)
- bzoj 1264: [AHOI2006]基因匹配Match
- BZOJ P1306 [CQOI2009]match循环赛
- BZOJ1264 [AHOI2006]基因匹配Match
- BZOJ 1264: [AHOI2006]基因匹配Match 树状数组+DP