标签:int 目的 gif eof com F12 display blog ima
第一行两个数n,m(n<=20,m<=100)。 接下来m行,每行一个数ai,表示第ai道题目可能会有i这个分数的档次。
一个数表示最多逆序对个数。
5 7 1 2 3 4 1 2 5
4
#include <bits/stdc++.h> using namespace std; const int N = 105, M = (1<<20) + 5; int n, m, a[N], all, ff[M], f[2][M], cur; int main() { scanf("%d%d",&n,&m); for(int i=1; i<=m; i++){ int p; scanf("%d",&p); a[i]=p-1; } all = 1<<n; for(int i=0; i<=n; i++) ff[1<<i] = 1; for(int i=1; i<all; i++) ff[i] = ff[i&-i] + ff[i^(i&-i)]; memset(f, -1, sizeof(f)); f[cur][0] = 0; for(int i=0; i<m; i++, cur ^= 1) { int *g = f[cur], *d = f[cur^1]; for(int s=0; s<all; s++) if(g[s] != -1) { d[s] = max(d[s], g[s]); if(~ s & (1<<a[i+1])) { int ns = s | (1<<a[i+1]); d[ns] = max(d[ns], g[s] + ff[ns >> (a[i+1] + 1)]); } g[s] = -1; } } printf("%d\n", f[cur][all-1]); return 0; }
标签:int 目的 gif eof com F12 display blog ima
原文地址:http://www.cnblogs.com/BobHuang/p/6817132.html