杭电 1224 Free DIY Tour

这题是讲有N个城市,每个城市都有魅力值,求能直飞到达各地最终返回目的地的最大魅力值。

可以很容易想到转移方程:dp[i]=max(dp[j])+mi[i];

代码:

 

View Code
 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 
 5 int mi[105],dp[105],ans[105],f[105];
 6 bool map[105][105];
 7 
 8 int main()
 9 {
10     int ca,n,m;
11     int i,j,x,y,p=1;
12     cin>>ca;
13     while(p<=ca)
14     {
15         memset(dp,0,sizeof(dp));
16         memset(map,0,sizeof(map));
17         cin>>n;
18         for(i=1;i<=n;i++)
19            cin>>mi[i];
20         mi[n+1]=0;
21         cin>>m;
22         for(i=1;i<=m;i++)
23         {
24             cin>>x>>y;
25             map[x][y]=1;
26         }
27         f[1]=-1;
28         for(i=2;i<=n+1;i++)
29             for(j=1;j<i;j++)
30                if(map[j][i]&&mi[i]+dp[j]>dp[i])
31                {
32                    dp[i]=mi[i]+dp[j];
33                    f[i]=j;
34                   } 
35         int k=n+1;
36         i=0;
37         while(f[k]!=-1)
38         {
39             ans[i++]=f[k];
40             k=f[k];
41         }   
42         cout<<"CASE "<<p<<'#'<<endl;
43         cout<<"points : "<<dp[n+1]<<endl;
44         cout<<"circuit : ";
45         for(j=i-1;j>=0;j--)
46           cout<<ans[j]<<"->";
47           cout<<'1'<<endl;
48         if(p<ca)
49           cout<<endl;
50          p++;
51     }
52     return 0;
53 }

 

 这里用f【】数组存储所能达到得地方。

 

转载于:https://www.cnblogs.com/xinmenghuairi/archive/2012/07/31/2616452.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值