程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Codeforces Round #228 (Div. 1) C 貪心

Codeforces Round #228 (Div. 1) C 貪心

編輯:C++入門知識

Codeforces Round #228 (Div. 1) C 貪心


嘎嘎,今天被一些事耽誤了,但是還是A了幾個題目,這道題還不錯

題目鏈接:


題意:兩個人玩游戲,有N堆紙牌,紙牌上有數字,A每次只能取N堆中的 其中一個的頂部的 紙牌,B只能取N堆中的其中一個底部 的紙牌,A,B都想讓自己取的和最大,問最後比分為多少


畫了一下,如果某一堆裡的 紙牌數量為偶數,發現其實是兩個人各分一半,因為如果對方想從這裡拿走本來屬於自己那半部分的 較大的牌,自己完全來得及阻止的,

接下來就是奇數了,奇數 其實先手者就搶到了中間的一張牌,另外兩半還是各自一半,所以 應該以每個奇數堆的 中間紙牌 的大小來進行貪心,


int n;

typedef struct Node {
	int mid;
	int id;
};

Node node[100 + 55];

int mp[100 + 55][100 + 55];

int ss[100 + 55];

void init() {
	memset(ss,0,sizeof(ss));
	memset(node,0,sizeof(node));
}

bool input() {
	while(cin>>n) {
		return false;
	}
	return true;
}

bool cmp(Node x,Node y) {
	return x.mid > y.mid;
}

void cal() {
	int ans1 = 0;
	int ans2 = 0;
	int cnt = 0;
	for(int i=0;i 0) {
			int k = node[i].id;
			for(int j=1;j<=(ss[k] + 1)/2;j++)
				ans1 += mp[k][j];
			for(int j=(ss[k] + 1)/2 + 1;j<=ss[k];j++)
				ans2 += mp[k][j];
		}
		else {
			int k = node[i].id;
			for(int j=1;j<=ss[k]/2;j++)
				ans1 += mp[k][j];
			for(int j=(ss[k] + 1)/2;j<=ss[k];j++)
				ans2 += mp[k][j];
		}
		mark *= -1;
	}
	cout<

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved