syhd142  
日历
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
统计
  • 随笔 - 23
  • 文章 - 122
  • 评论 - 31
  • 引用 - 0

导航

常用链接

留言簿(2)

随笔档案(23)

文章分类(270)

文章档案(122)

我的豆瓣

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 
还是SGU的数据强啊,同样一道题目,我的代码明显存在Bug的,对全负数的情况处理不周,看来以后不能以AC为目标。
代码的健壮性是值得商榷的。
#include <stdio.h>
#include 
<string.h>

#define N 105
#define INF 1 << 28

int a[N][N], pre[N][N], stack[N];

int main()
{
    
int f, v;
    
while(~scanf("%d %d"&f, &v))
    {
        
for(int i = 1; i <= f; i++)
            
for(int j = 1; j <= v; j++)
            {
                scanf(
"%d"&a[i][j]);
                
if(i > j) a[i][j] = -INF;//这里不加,可以过PKU,不加这句后面的循环需要改动其实位置,不然是错误的。
                pre[i][j] 
= -1;
            }
        
for(int i = 2; i <= f; i++)
        {
            
for(int j = i; j <= v; j++)
            {
                
int mmin = -INF;
                
for(int k = 1; k < j; k++)
                {
                    
if(a[i - 1][k] > mmin)
                    {
                        mmin 
= a[i - 1][k];
                        pre[i][j] 
= k;
                    }
                }
                a[i][j] 
+= mmin;
            }
        }
        
int ans = -INF, top = 0;
        
for(int i = f; i <= v; i++)
        {
            
if(a[f][i] > ans)
            {
                ans 
= a[f][i];
                stack[top] 
= i;
            }
        }
        
while(f != 1)
        {
            
int t = stack[top];
            stack[
++top] = pre[f][t];
            f
--;
        }
        printf(
"%d\n", ans);
        
for(int i = top; i >= 0; i--)
        {
            printf(
"%d", stack[i]);
            
if(i) printf(" ");
            
else printf("\n");
        }
    }
    
return 0;
}
posted on 2010-06-06 23:43 Fucker 阅读(132) 评论(0)  编辑 收藏 引用 所属分类: ACM/ICPCDP

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


 
Copyright © Fucker Powered by: 博客园 模板提供:沪江博客