心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0
判断存在性的动态规划,d[i,j,k]==true表示存在着一条到达点(i,j)的路径,路径之和mod 100的结果为k。
以下是我的代码:
#include<iostream>
#include
<string.h>
#define maxn 27
#define maxm 100
using namespace std;

long n,ans,r[maxn][maxn];
bool d[maxn][maxn][maxm];

int main()
{
    cin
>>n;
    
for(long i=1;i<=n;i++)
      
for(long j=1;j<=i;j++)
        cin
>>r[i][j];
    
//  Input
    
    memset(d,
false,sizeof(d));
    d[
1][1][r[1][1]%maxm]=true;
    
//  Init
    
    
for(long i=2;i<=n;i++)
      
for(long j=1;j<=i;j++)
        
for(long k=0;k<maxm;k++)
          
if(d[i-1][j][k])
            d[i][j][(k
+r[i][j])%maxm]=true;
          
else if(j>=2&&d[i-1][j-1][k])
            d[i][j][(k
+r[i][j])%maxm]=true;
    
//  DP
    
    ans
=0;
    
for(long i=1;i<=n;i++)
      
for(long j=maxm-1;j>=0;j--)
        
if(d[n][i][j]&&ans<j)
          ans
=j;
    cout
<<ans<<endl;
    
//  Output
    
return 0;
}
posted on 2010-10-29 22:50 lee1r 阅读(653) 评论(2)  编辑 收藏 引用 所属分类: 题目分类:动态规划

FeedBack:
# re: tyvj P1076 数字三角形2[未登录]
2010-11-13 23:40 | Jasper Ho
我觉得TYVJ四个数字三角形的样例跟题意都有问题啊。。  回复  更多评论
  
# re: tyvj P1076 数字三角形2
2010-11-18 18:30 | Lee1R
@Jasper Ho
至少这题的样例是没有问题的。  回复  更多评论
  

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