http://noi.openjudge.cn/ch0206/9268/
题意:
输入n个酒瓶,每个酒瓶中有不同体积的酒,问最多能喝到多少酒,前提是不能连续喝三瓶酒。
思路:
d[i]的意思是分析到第i个酒瓶时所能喝的最多酒。
状态转移方程为:
d[i] = max(d[i - 1], max(d[i - 2] + a[i], d[i - 3] + a[i] + a[i - 1]));
1 #include<iostream> 2 #include<string> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 7 int n; 8 int a[705]; 9 int d[705]; 10 11 int main() 12 { 13 //freopen("D:\txt.txt", "r", stdin); 14 while (cin >> n && n) 15 { 16 for (int i = 1; i <= n; i++) 17 cin >> a[i]; 18 d[0] = 0; 19 for (int i = 1; i <= n; i++) 20 { 21 if (i <= 2) d[i] = d[i - 1] + a[i]; 22 else 23 { 24 d[i] = max(d[i - 1], max(d[i - 2] + a[i], d[i - 3] + a[i] + a[i - 1])); 25 } 26 } 27 cout << d[n] << endl; 28 } 29 return 0; 30 }