hdoj吧 关注:161贴子:301
  • 2回复贴,共1

求助,hdoj1024 动态规划

只看楼主收藏回复

不知道错在哪里,自己试了几个,感觉结果没什么问题,但无法通过。
帮看看问题出在哪里。谢谢

代码如下:
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
int sum(int begin, int end, int m, int**data) {
if (begin== end){
//cout << '(' << begin << ',' << end << ')' << data[begin][end] << " ";
return data[begin][end];
}
int max;
if (m == 1){
max = data[begin][begin];
for (int i = begin; i <= end; i++){
for (int j = i ; j <= end; j++){
int newdata = data[i][j];
if (newdata > max){
max = newdata;
}
}
}
//cout << '(' << begin << ',' << end << ')' << max << " ";
return max;
}
max = data[begin][begin] + sum(begin + 1, end, m - 1, data);
for (int i = 1; i < end - begin - m + 2; i++){
int newdata = sum(begin, begin + i, 1, data) + sum(begin + i + 1, end, m - 1, data);
if (newdata > max){
max = newdata;
}
}
//cout << '(' << begin << ',' << end << ')' << max << " ";
return max;
}
int main(){
int num, m;
while (true){
cin >> m >> num;
int * data = new int[num];
for (int i = 0; i < num; i++){
cin >> data[i];
}
int * data1 = new int[num * (num+1)/2];
int ** data2 = new int *[num];
for (int i = 0, s = 0; i < num; i++){
s += i;
data2[i] = &data1[num * i - s];
}
//建立二维数组
for (int i = 0; i < num; i++){
data2[i][i] = data[i];
for (int j = i+1; j < num; j++){
data2[i][j] = data2[i][j - 1] + data[j];
}
}
cout/* << endl */<< sum(0, num - 1, m, data2) << endl;
delete[]data;
delete[]data1;
delete[]data2;
}
system("pause");
return 0;
}


1楼2015-01-27 13:32回复
    顶一下


    2楼2015-01-27 13:36
    回复
      #include<iostream>
      using namespace std;
      int a[1000001], dp[1000001], pre[1000001];
      int max(int a, int b)
      {
      return a > b ? a : b;
      }
      int main()
      {
      int i, j, n, m;
      while (cin >> m >> n)
      {
      for (i = 1; i <= n; i++)
      {
      cin >> a[i];
      dp[i] = 0;
      pre[i] = 0;
      }
      dp[0] = 0;
      pre[0] = 0;
      int tmp;
      for (i = 1; i <= m; i++)
      {
      tmp = -9999999;
      for (j = i; j <= n; j++)
      {
      dp[j] = max(dp[j - 1] + a[j], pre[j - 1] + a[j]);
      pre[j - 1] = tmp;
      tmp = max(dp[j], tmp);
      }
      }
      cout << tmp << endl;
      }
      return 0;
      }


      IP属地:上海3楼2015-05-30 09:21
      回复