今天看了一上午dp。看不太懂啊。dp确实不简单。今天開始学习dp,搜了杭电的dp46道,慢慢来吧。白书上的写的
又不太具体,先写几道题目再说。
。。
题目连接:点击打开链接
思路:就是当当前的和是小于0的时候就又一次计数。大于或者等于0的时候都相加。。。
/* Name: Copyright: Author: Date: 08/08/15 08:41 Description: */ #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<vector> #include<set> #include<string> #include<algorithm> using namespace std; int a[100005]; int main() { int T,i,n; cin >> T; int cnt = 0; while(T--) { cnt++; cin >> n; for(i=1; i<=n; i++) cin >> a[i]; int start = 1,end = 1,sta = 1; int b=0, sum = -0x7fffffff; for(i=1; i<=n; i++) { if(b >= 0) b += a[i]; else { b = a[i]; start = i; } if(b > sum) { sta = start; end = i; sum = b; } } printf("Case %d: ",cnt); cout << sum << " " << sta << " " << end << endl; if(T) cout << endl; } return 0; }