栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 3351 Gerrymandering

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 3351 Gerrymandering

#include <algorithm>using namespace std;  const int INF = 12345678;  const int N = 1010;  const int P = 12; int n, p; int v[N][P]; int win[N][N]; int dp[N][N]; int Max(int a,int b){return a>b ? a:b;} void input() {     scanf("%d", &n);     scanf("%d", &p);     int i, j, k;     memset(v[0], 0, sizeof(v[0]));     for(i=1; i<=n; i++)         for(j=1; j<=p; j++) {  scanf("%d", &k);  v[i][j] = v[i-1][j] + k;         } } void init() {     int i, j, k, vote;     for(i=1; i<=n; i++)         for(j=i; j<=n; j++) {  vote = v[j][1] - v[i-1][1];  for(k=2; k<=p; k++)      if(v[j][k] - v[i-1][k] >= vote)          break;  if(k > p)    win[i][j] = 1;  else        win[i][j] = -1;         } } int solve() {     init();     int i, j, k, t;     int list[N], top, mx;     dp[0][0] = 0;     for(j=1; j<=n; j++) {         top = 0;         mx = -INF;         for(i=j; i<=n; i++) {  if(dp[i-1][j-1] > mx) {      mx = dp[i-1][j-1];      list[0] = i-1;      top = 1;  }  else if(dp[i-1][j-1] == mx)      list[top++] = i-1;  for(t=0; t<top-1; t++)      if(win[list[t]+1][i] == 1)          break;  dp[i][j] = mx + win[list[t]+1][i];         }     }     int ans;     for(ans=n; ans>=1; ans--)         if(dp[n][ans] > 0)  return n-ans;     return -1; } int main() {     input();     printf("%dn", solve());     return 0; }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/377654.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号