HDU 2085 核反应堆
解题报告:题目大意,在第0微秒的时候有一个高能质子,定义有如下反应,当一个高能质子撞击核子时,质子被吸收,同时放出3个高能质子和一个低能质子,如果一个低能质子撞击核子的话,可以放出两个高能质子和一个低能质子,问在第n微秒的时候一共有多少个高能质子和低能质子。超级简单DP题,打表就可以了,不打表也行,假如定义一个数组high[34]表示高能质子的个数,和一个数组low[34]表示低能质子的个数,那么递推的公式就是:
high[i] = 3*high[i-1] + low[i-1];
low[i] = high[i-1] + low[i-1];
本题要注意的就是数据范围可能比较大,所以要__int64(交C++);
1 #include<cstdio> 2 #include<cstring> 3 int times[1000005]; 4 5 int main() { 6 int N,d; 7 while(scanf("%d",&N)!=EOF) { 8 memset(times,0,sizeof(times)); 9 for(int i = 1;i<=N;++i) { 10 scanf("%d",&d); 11 times[d]++; 12 } 13 int max = 0; 14 for(int i = 0;i<=1000000;++i) 15 if(times[i]>times[max]) 16 max = i; 17 printf("%d\n",max); 18 } 19 return 0; 20 } 21 22