[NOIP2014] 普及组
2016-11-18 17:50
204 查看
模拟。
将所有“两个不同数之和”装进桶里,扫描原数组记录满足条件的数的个数。
/*by SilverN*/ #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<vector> using namespace std; int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int f[17][17]; int n,m,r,c; int mp[17][17]; int ans=1e9; //bool vis[17]; int use[17]; int ds[17];//行之间的差值 int cs[17][17];//列之间的差值 void DP(){ memset(cs,0,sizeof cs); memset(ds,0,sizeof ds); memset(f,0x3f,sizeof f); int i,j; for(i=1;i<m;i++) for(j=i+1;j<=m;j++){ for(int k=1;k<=r;k++){ cs[i][j]+=abs(mp[use[k]][j]-mp[use[k]][i]); } } for(i=1;i<=m;i++) for(j=2;j<=r;j++){ ds[i]+=abs(mp[use[j]][i]-mp[use[j-1]][i]); } //init // for(i=1;i<=m;i++) // memset(f[0],0,sizeof f[0]); for(i=1;i<=c;i++){ for(j=i;j<=m;j++){ for(int k=0;k<j;k++){ f[i][j]=min(f[i][j],f[i-1][k]+cs[k][j]); } f[i][j]+=ds[j]; } } int res=1e9; for(i=c;i<=m;i++)res=min(res,f[c][i]); // printf("res:%d\n",res); ans=min(ans,res); // printf("%d\n",ans); return; } void DFS(int dep,int pos){ if(dep>r){ /* printf("use:"); for(int i=1;i<=r;i++)printf("%d ",use[i]); printf("\n");*/ DP();return; } int lim=n-(r-dep); for(int i=pos;i<=lim;i++){ use[dep]=i; DFS(dep+1,i+1); } return; } int main(){ int i,j; n=read();m=read();r=read();c=read(); for(i=1;i<=n;i++) for(j=1;j<=m;j++) mp[i][j]=read(); DFS(1,1); // use[1]=4;use[2]=5;DP(); printf("%d\n",ans); return 0; }子矩阵
相关文章推荐
- [NOIP普及组2014第三题]螺旋矩阵
- 【蒻爆了的NOIP系列--普及组初赛】(1)2010-2014问题求解
- NOIP2014-普及组复赛-第1题-珠心算测验
- NOIP2014普及组--螺旋矩阵(模拟)
- 比例简化 (noip2014普及组第二题)
- NOIP2014普及组反思和总结
- [普及]NOIP 2014 螺旋矩阵
- NOIP2014-普及组复赛-第一题-珠心算测验
- [NOIP 2014普及T4] 子矩阵题解
- 【noip2014普及】子矩阵
- NOIP 2014 普及组 T1 珠心算测验
- [赛题]NOIP2014普及组
- NOIP 2014 普及组 T2 比例化简
- NOIP2014-普及组复赛-第二题-比例简化
- NOIP 2014 普及组 T3 螺旋矩阵
- NOIP2014-普及组复赛-第三题-螺旋矩阵
- 2014NOIP普及组 子矩阵
- NOIP 2014 普及组 T4 子矩阵
- NOIP2014-普及组复赛-第四题-子矩阵
- 洛谷 P2258 NOIP2014普及组 T4 子矩阵 DFS+DP