您的位置:首页 > 其它

POJ 1050 to the max最大子矩阵

2013-04-15 18:55 399 查看
比较经典的DP题目,题意就是给你一个大矩阵然后让你找到一个子矩阵使得该矩阵云素和最大.这个题目的优化很厉害的,直接枚举起始位置然后用最大子段和求解.下面是代码.

#include<iostream>
using namespace std;
int ko[105][105];
int b[105];
int dp[105];
int main()
{
int N,i,j,k,maxi,p,jo;
cin>>N;
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
cin>>ko[i][j];
maxi=-1000000;
for(i=1;i<=N;i++)
{
memset(b,0,sizeof(b));
for(j=i;j<=N;j++)
{
for(k=1;k<=N;k++)
b[k]=b[k]+ko[j][k];
dp[1]=b[1];
jo=dp[1];
for(p=2;p<=N;p++)
{
if(dp[p-1]>0)
dp[p]=dp[p-1]+b[p];
else dp[p]=b[p];
if(dp[p]>jo)
jo=dp[p];
}
if(jo>maxi)
maxi=jo;
}
}
cout<<maxi<<endl;
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: