nyoj104_最大和dp
2016-12-22 17:26
344 查看
原题链接》》》
思路就是转化为一维求最大和
nyoj44就是一维最大和的处理
一维最大和处理》》》
本来想优化一下,结果时间还变长了(让ans[j]不用每次累加)
思路就是转化为一维求最大和
nyoj44就是一维最大和的处理
一维最大和处理》》》
#include<stdio.h> #include<string.h> int num[101][101]; int ans[101]; int oneD_Max(int a[],int n){ int sum=0; int max=-10000; for(int i=0;i<n;i++){ if(sum>0) sum+=a[i]; else sum=a[i]; if(sum>max) max=sum; } return max; } int main(){ int N,n,m,i,j,k,max,temp; scanf("%d",&N); while(N--){ max=-10000; scanf("%d%d",&n,&m); for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&num[i][j]); for(k=0;k<n;k++){ memset(ans,0,sizeof(ans)); for(i=k;i<n;i++){ for(j=0;j<m;j++) ans[j]+=num[i][j]; temp=oneD_Max(ans,j); if(temp>max) max=temp; } } printf("%d\n",max); } return 0; }
本来想优化一下,结果时间还变长了(让ans[j]不用每次累加)
#include<stdio.h> #include<string.h> int num[101][101]; int ans[101]; int oneD_Max(int a[],int n){ int sum=0; int max=-10000; for(int i=0;i<n;i++){ if(sum>0) sum+=a[i]; else sum=a[i]; if(sum>max) max=sum; } return max; } int main(){ int N,n,m,i,j,k,max,temp; scanf("%d",&N); while(N--){ max=-10000; memset(ans,0,sizeof(ans)); scanf("%d%d",&n,&m); for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&num[i][j]); for(i=1;i<n;i++) for(j=0;j<m;j++) num[i][j]+=num[i-1][j]; for(k=0;k<n;k++){ for(i=k;i<n;i++){ if(k==0){ temp=oneD_Max(num[i],m); } else{ for(j=0;j<m;j++) ans[j]=num[i][j]-num[k-1][j]; temp=oneD_Max(ans,m); } if(temp>max) max=temp; } } printf("%d\n",max); } return 0; }
相关文章推荐
- NYOJ - 104 最大和【DP】转自:飘过的小牛的博客
- nyoj 104 最大和 【压缩矩阵 DP求最大连续子序列的和】
- nyoj 104 最大和 【dp】
- nyoj 104 最大和 【区间dp】
- NYOJ 104 最大子矩阵(二维DP)
- nyoj 104 最大和 51nod oj 1051 最大子矩阵和 【DP】
- NYOJ 104 最大子矩阵(二维DP)
- NYOJ - 104 最大和【DP】
- 【POJ1050】To the Max (动态规划、最大字串和、最大子矩阵和)||NYOJ44 ||NYOJ104
- (NYoj 104)最大和 --二维最大连续子串和转化为一维,动态规划
- NYOJ 104 最大和
- nyoj 104 最大和(子矩阵最大和)(枚举)
- NYOJ 104 最大和
- NYOJ-104-最大和(最大子串+一个小技巧)
- NYOJ 104 最大和
- NYOJ 104 最大和(求最大子矩阵)
- 最大子矩阵求和 NYOJ 104 && 372 && HDU 1081
- NYOJ-104最大和
- nyoj 104 最大和(子矩阵最大和)(枚举)
- nyoj 最大和 104 (二维子矩阵 DP) 好题