2014上海全国邀请赛1003(hdu 5092)
来源:互联网 发布:网络教育全程托管 编辑:程序博客网 时间:2024/05/17 04:38
Seam Carving
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 79 Accepted Submission(s): 46
Problem Description
Fish likes to take photo with his friends. Several days ago, he found that some pictures of him were damaged. The trouble is that there are some seams across the pictures. So he tried to repair these pictures. He scanned these pictures and stored them in his computer. He knew it is an effective way to carve the seams of the images He only knew that there is optical energy in every pixel. He learns the following principle of seam carving. Here seam carving refers to delete through horizontal or vertical line of pixels across the whole image to achieve image scaling effect. In order to maintain the characteristics of the image pixels to delete the importance of the image lines must be weakest. The importance of the pixel lines is determined in accordance with the type of scene images of different energy content. That is, the place with the more energy and the richer texture of the image should be retained. So the horizontal and vertical lines having the lowest energy are the object of inspection. By constantly deleting the low-energy line it can repair the image as the original scene.
For an original image G of m*n, where m and n are the row and column of the image respectively. Fish obtained the corresponding energy matrix A. He knew every time a seam with the lowest energy should be carved. That is, the line with the lowest sum of energy passing through the pixels along the line, which is a 8-connected path vertically or horizontally.
Here your task is to carve a pixel from the first row to the final row along the seam. We call such seam a vertical seam.
For an original image G of m*n, where m and n are the row and column of the image respectively. Fish obtained the corresponding energy matrix A. He knew every time a seam with the lowest energy should be carved. That is, the line with the lowest sum of energy passing through the pixels along the line, which is a 8-connected path vertically or horizontally.
Here your task is to carve a pixel from the first row to the final row along the seam. We call such seam a vertical seam.
Input
There several test cases. The first line of the input is an integer T, which is the number of test cases, 0<T<=30. Each case begins with two integers m, n, which are the row and column of the energy matrix of an image, (0<m,n<=100). Then on the next m line, there n integers.
Output
For each test case, print “Case #” on the first line, where # is the order number of the test case (starting with 1). Then print the column numbers of the energy matrix from the top to the bottom on the second line. If there are more than one such seams, just print the column number of the rightmost seam.
Sample Input
24 355 32 7517 69 7354 81 6347 5 456 651 57 49 65 50 7433 16 62 68 48 612 49 76 33 32 7823 68 62 37 69 3968 59 77 77 96 5931 88 63 79 32 34
Sample Output
Case 12 1 1 2Case 23 2 1 1 2 1
Source
2014上海全国邀请赛——题目重现(感谢上海大学提供题目)
题意:是让我们求出一条纵向的数列,使其和最小,每个数只能往八个方向扩展。
做法:其实就是dp并记录路径即可,dp[i][j]=min(dp[i-1][j-1],dp[i-1][j],dp[i-1][j+1])。
#include <iostream>#include <cstdio>#include <climits>#include <cstring>#include <cstdlib>#include <cmath>#include <vector>#include <queue>#include<map>#include <algorithm>#include<ctime>#define esp 1e-6#define LL unsigned long long#define inf 0x0f0f0f0fusing namespace std;int num[105][105],lj[105][105],jl[105];int min1(int a,int b,int c){ int ss; ss=min(a,b); ss=min(ss,c); return ss;}int main(){ int t,n,m; int i,j,cas; int kk; scanf("%d",&t); for(cas=1;cas<=t;cas++) { memset(num,inf,sizeof(num)); scanf("%d%d",&n,&m); for(i=1;i<=n;i++) for(j=1;j<=m;j++) scanf("%d",&num[i][j]); for(i=2;i<=n;i++) for(j=1;j<=m;j++) { kk=num[i][j]; num[i][j]+=min1(num[i-1][j-1],num[i-1][j],num[i-1][j+1]); if(kk==num[i][j]-num[i-1][j+1]) lj[i][j]=j+1; else if(kk==num[i][j]-num[i-1][j]) lj[i][j]=j; else if(kk==num[i][j]-num[i-1][j-1]) lj[i][j]=j-1; } int ans,aa,bb; ans=1000000009; for(i=1;i<=m;i++) if(num[n][i]<=ans) { ans=num[n][i]; aa=i; } kk=1; jl[kk]=aa; for(i=n;i>=2;i--) { bb=jl[kk]; jl[++kk]=lj[i][bb]; } printf("Case %d\n",cas); for(i=kk;i>=1;i--) { if(i!=kk) printf(" "); printf("%d",jl[i]); } printf("\n"); }}
0 0
- 2014上海全国邀请赛1003(hdu 5092)
- 2014上海全国邀请赛1001(hdu 5090)
- 2014上海全国邀请赛1006(hdu 5095)
- 2014上海全国邀请赛1010(hdu 5099)
- 2014上海全国邀请赛Maze
- hdu 5092 Seam Carving 2014上海全国邀请赛——题目重现
- 【HDU】2014上海全国邀请赛——题目重现(感谢上海大学提供题目) 题解
- 2014上海全国邀请赛 j 题!!
- 2014上海全国邀请赛 解题报告
- 2014上海全国邀请赛 【(5+3)/10】
- hdu 5090 Game with Pearls 2014上海全国邀请赛——题目重现
- 2014上海全国邀请赛题解 HDOJ 5090-5099
- Comparison of Android versions(2014上海全国邀请赛)
- SDKD TeamContest F(2014上海全国邀请赛)
- 2014上海全国邀请赛——题目重现 4.24
- 2014上海全国邀请赛训练总结【7/10】
- 2014上海全国邀请赛(hdu 5090 - 5099)dp+线段树+拓扑排序+bfs(状态压缩)
- HDU 5093Battle ships(2014上海邀请赛)
- VxWorks 触摸屏驱动
- 001、Hadoop安装配置
- Ubuntu13.10安装JDK6
- Paper Work Cf250A
- for (语句1; 条件; 语句2 )小练习
- 2014上海全国邀请赛1003(hdu 5092)
- java抓取网页 --- 网络爬虫
- Gridview中奇偶数行颜色设置
- J2EE开发常用架构及其性能
- 创建本年度周六、周日
- Codeforces 479A Expression(水题)
- switch学习练习
- CodeForces-118B-PresentFromLena
- C语言大世界————03剑荡++