标签:
我这个弱B
一开始就认为对于一个数, 对半分肯定比其他的分配方案好,然后最终也没过
对半分不一定是最好的分配方案,比如, 9 可能分成3个3比对半分好
真不知道那些大牛是怎么思考问题的,我看了第一的代码,他枚举最终状态的最大值, 他是怎么思考问题的呢?
下面这个我改的蔡的暴力代码, 加上了枚举每一种分法,目前能过小数据, 大数据超时应该
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 5 using namespace std; 6 7 int a[1005]; 8 int n; 9 10 int minTime(int i) { 11 int j; 12 for(j = i; j >= 1; j-- ) { 13 if(a[j] > 0) 14 break; 15 } 16 if(j <= 1) { 17 return 1 == j && a[j] > 0 ? 1 : 0; 18 } 19 20 int ans = j; 21 for (int x = 1; x <= (j >> 1); ++x) { 22 a[x] += a[j]; 23 a[j - x] += a[j]; 24 int tmp = a[j] + minTime(j - 1); 25 ans = ans > tmp ? tmp : ans; 26 a[x] -= a[j]; 27 a[j - x] -= a[j]; 28 } 29 30 return ans; 31 } 32 33 int main() { 34 int T; 35 cin >> T; 36 for (int cas = 1; cas <= T; ++cas) { 37 cin >> n; 38 memset(a, 0, sizeof(a)); 39 for (int i = 0; i < n; ++i) { 40 int p; 41 cin >> p; 42 ++a[p]; 43 } 44 int ans = minTime(1000); 45 cout << "Case #" << cas << ": " << ans << endl; 46 } 47 return 0; 48 }
下面这个是大神的代码, 我留做纪念
1 int min = 10000; 2 for (int lim = 1; lim <= counts.length; lim++) 3 { 4 int moves = 0; 5 for (int i = 0; i < counts.length; i++) 6 moves += ((i - 1) / lim) * counts[i]; //这个i-1我也是醉了 7 if (moves + lim < min) 8 min = moves + lim; 9 }
GCJ2015 Problem B. Infinite House of Pancakes
标签:
原文地址:http://www.cnblogs.com/ACSeed/p/4421134.html