Nguồn đề bài: http://vn.spoj.com/problems/LINEGAME/
1. Đề bài LINEGAME spoj
Trò chơi với băng số là trò chơi tham gia trúng thưởng được mô tả như sau: Có một băng hình chữ nhật được chia ra làm n ô vuông, đánh số từ trái qua phải bắt đầu từ 1. Trên ô vuông thứ i người ta ghi một số nguyên dương ai, i = 1, 2, …, n. Ở một lượt chơi, người tham gia trò chơi được quyền lựa chọn một số lượng tùy ý các ô trên băng số. Giả sử theo thứ tự từ trái qua phải, người chơi lựa chọn các ô i1, i2, …, ik. Khi đó điểm số mà người chơi đạt được sẽ là:
- ai1 – ai2 + … + (-1)k-1aik
Yêu cầu: Hãy tính số điểm lớn nhất có thể đạt được từ một lượt chơi.
Dữ liệu
- Dòng đầu tiên chứa số nguyên dương n ( n ≤ 106 ) là số lượng ô của băng số;
- Dòng thứ hai chứa n số nguyên dương a1, a2, …, an ( ai ≤ 104, i = 1, 2, …, n ) ghi trên băng số. Các số liên tiếp trên cùng dòng được ghi cách nhau bởi ít nhất một dấu cách.
Kết quả
- Một số nguyên duy nhất là số điểm lớn nhất có thể đạt được từ một lượt chơi.
Ví dụ

| Dữ liệu | Kết quả |
|---|---|
| 7 4 9 2 4 1 3 7 | 17 |
Ràng buộc: 60% số tests ứng với 60% số điểm của bài có 1 ≤ n ≤ 20.
==============================
bài này sử dụng QHĐ:
2. code tham khảo LINEGAME spoj pascal , c++:
uses math;
const fi='';
nmax=1000000;
type data=longint;
var
n:data;
a:array[1..nmax] of word;
cong,tru:array[1..nmax] of int64;
f:text;
procedure docfile;
var i:data;
begin
assign(f,fi); reset(f);
readln(f,n);
for i:=1 to n do
read(f,a[i]);
close(f);
end;
procedure bpa;
var i:data;
begin
cong[1]:=a[1];
tru[1]:=0;
for i:=2 to n do
begin
cong[i]:=max(tru[i-1]+a[i],cong[i-1]);
tru[i]:=max(cong[i-1]-a[i],tru[i-1]);
end;
writeln(max(cong[n],tru[n]));
end;
begin
docfile;
bpa;
//readln;
end.
#include<cstdio>
using namespace std;
typedef long long int ll;
int main()
{
int n,tg;
ll max=0,m1=0,m2=0,m3;
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
scanf("%d",&tg);
m3=m1;
if(m1<m2+tg) m1=m2+tg;
if(m2<m3-tg) m2=m3-tg;
}
if(m1>max) max=m1;
if(m2>max) max=m2;
printf("%lld",max);
}
Cảm ơn bạn nhiều nhá. Trình bày đơn giản mà dễ hiểu.
tại sao lại khởi tạo cong[1]=a[1] hả anh, e ko khởi tạo vẫn ac
tại sao lại khởi tạo cong[1]=a[1] hả anh