hdu1224Free DIY Tour

看题目时忽略了一个条件,就是只能从1 到2,不可以从2到1,其实这个原本就应该排除掉的,可是我还在犹豫这个用不用考虑

接着弄上我的代码,不过presentance error

#include "iostream"
#include "string.h"
using namespace std;
int main(){
  int ncase,top=1,map[110][110],dp[110],num[110],n,i,m,a,b,j,list[110],path[110];
  cin>>ncase;
  while(ncase--){
    cin>>n;
    memset(num,0,sizeof(num));
    for(i=1;i<=n;i++)cin>>num[i];
    cin>>m;
    memset(map,0,sizeof(map));
    memset(dp,0,sizeof(dp));
    for(i=1;i<=m;i++){
      cin>>a>>b;
      map[a][b]=1;
    }
    for(i=1;i<n+1;i++){
      for(j=i+1;j<=n+1;j++){
        if(map[i][j]&&dp[j]<dp[i]+num[j]){
          dp[j]=dp[i]+num[j];
          path[j]=i;
        }
      }
      //for(j=1;j<=n+1;j++)cout<<dp[j]<<' ';cout<<endl;
    }
    j=n+1;list[1]=1;
    for(i=2;;i++){
      list[i]=path[j];
      if(path[j]==1)break;
      j=path[j];
    }
    cout<<"CASE "<<top++<<'#'<<endl;
    cout<<"points : "<<dp[n+1]<<endl;
    cout<<"circuit : ";
    for(j=i;j>=1;j--){
      cout<<list[j];
      if(j!=1)cout<<"->";
    }cout<<endl;
  }
}

网上的答案

#include<iostream>
#include<string>
using namespace std;

int mi[105],dp[105],ans[105],f[105];
bool map[105][105];

int main()
{
    int ca,n,m;
    int i,j,x,y,p=1;
    cin>>ca;
    while(p<=ca)
    {
        memset(dp,0,sizeof(dp));
        memset(map,0,sizeof(map));
        cin>>n;
        for(i=1;i<=n;i++)
           cin>>mi[i];
        mi[n+1]=0;
        cin>>m;
        for(i=1;i<=m;i++)
        {
            cin>>x>>y;
            map[x][y]=1;
        }
        f[1]=-1;
        for(i=2;i<=n+1;i++)
            for(j=1;j<i;j++)
               if(map[j][i]&&mi[i]+dp[j]>dp[i])
               {
                   dp[i]=mi[i]+dp[j];
                   f[i]=j;
                  } 
        int k=n+1;
        i=0;
        while(f[k]!=-1)
        {
            ans[i++]=f[k];
            k=f[k];
        }   
        cout<<"CASE "<<p<<'#'<<endl;
        cout<<"points : "<<dp[n+1]<<endl;
        cout<<"circuit : ";
        for(j=i-1;j>=0;j--)
          cout<<ans[j]<<"->";
          cout<<'1'<<endl;
        if(p<ca)
          cout<<endl;
         p++;
    }
    return 0;
}

 

 

 

posted @ 2013-08-28 19:34  龙城星  阅读(324)  评论(0编辑  收藏  举报