(1224)HDU
来源:互联网 发布:全国矢量数据 编辑:程序博客网 时间:2024/05/16 05:12
#include<iostream>
#include<cstdio>
#include<string.h>
#include<string>
#include<stack>
#include<set>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#define ll __int64
#define lll unsigned long long
#define MAX 1000009
#define eps 1e-8
#define INF 0xfffffff
using namespace std;
/*
DP:属于决策性DP,不断的判断在联通的前提下,是否是最大。因为只能从一个位置不断向下拓展。所以遍历一遍就可以了。
转移方程 :dp[i] = max(dp[i],dp[j] + w[i]) j<i;
*/
int ma[509][509];
int dp[1009];//选择第i点时的最大值
int f[1009];
int a[1009];
int aa[1009];
int w[1009];
int main()
{
int t;
int d = 1;
scanf("%d",&t);
while(t--)
{
memset(dp,0,sizeof(dp));
memset(ma,0,sizeof(ma));
int n;
scanf("%d",&n);
for(int i = 1; i<=n; i++)
{
scanf("%d",&w[i]);
}
w[n+1] = 0;//最后一点的价值为0
int m;
scanf("%d",&m);
for(int i = 1; i<=m; i++)
{
int a,b;
scanf("%d%d",&a,&b);
ma[a][b] = 1;//a - b联通
}
f[1] = -1;//路径的头为 - 1
for(int i = 2;i<=n+1;i++)
{
for(int j = 1;j<i;j++)
{
if(ma[j][i]&&dp[i]<dp[j]+w[i])
{
dp[i] = dp[j] + w[i];
f[i] = j;//不断的存储父亲
}
}
}
int k = n+1;
int s = 0;
while(f[k]!=-1)
{
aa[s++] = f[k];//保存路径
k = f[k];
}
if(d!=1)
cout<<endl;
printf("CASE %d#\n",d++);
printf("points : %d\n",dp[n+1]);//经过的最大值就是dp[n+1];
printf("circuit : ");
for(int i = s-1;i>=0;i--)
{
cout<<aa[i]<<"->";
}
cout<<1<<endl;
}
return 0;
}
#include<cstdio>
#include<string.h>
#include<string>
#include<stack>
#include<set>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#define ll __int64
#define lll unsigned long long
#define MAX 1000009
#define eps 1e-8
#define INF 0xfffffff
using namespace std;
/*
DP:属于决策性DP,不断的判断在联通的前提下,是否是最大。因为只能从一个位置不断向下拓展。所以遍历一遍就可以了。
转移方程 :dp[i] = max(dp[i],dp[j] + w[i]) j<i;
*/
int ma[509][509];
int dp[1009];//选择第i点时的最大值
int f[1009];
int a[1009];
int aa[1009];
int w[1009];
int main()
{
int t;
int d = 1;
scanf("%d",&t);
while(t--)
{
memset(dp,0,sizeof(dp));
memset(ma,0,sizeof(ma));
int n;
scanf("%d",&n);
for(int i = 1; i<=n; i++)
{
scanf("%d",&w[i]);
}
w[n+1] = 0;//最后一点的价值为0
int m;
scanf("%d",&m);
for(int i = 1; i<=m; i++)
{
int a,b;
scanf("%d%d",&a,&b);
ma[a][b] = 1;//a - b联通
}
f[1] = -1;//路径的头为 - 1
for(int i = 2;i<=n+1;i++)
{
for(int j = 1;j<i;j++)
{
if(ma[j][i]&&dp[i]<dp[j]+w[i])
{
dp[i] = dp[j] + w[i];
f[i] = j;//不断的存储父亲
}
}
}
int k = n+1;
int s = 0;
while(f[k]!=-1)
{
aa[s++] = f[k];//保存路径
k = f[k];
}
if(d!=1)
cout<<endl;
printf("CASE %d#\n",d++);
printf("points : %d\n",dp[n+1]);//经过的最大值就是dp[n+1];
printf("circuit : ");
for(int i = s-1;i>=0;i--)
{
cout<<aa[i]<<"->";
}
cout<<1<<endl;
}
return 0;
}
0 0
- HDU 1224
- HDU 1224
- hdu 1224
- hdu 1224
- (1224)HDU
- hdu 1224
- hdu 1224
- hdu 1224 最长路
- hdu 1224 Online dp
- HDU 1224(dp46)
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- html编辑的基本知识
- CSS排版观念
- 123
- 分治策略
- Xamarin Mono For Android 4.20 安装、破解
- (1224)HDU
- 读懂Java中的Socket编程
- OpenLayers中的球面墨卡托投影
- ssh框架如何同时使用两个数据库
- 公民委托诉讼代理人的注意事项
- Android:多语言对应
- 手机SD卡不能格式化怎么办
- C语言学习笔记(三) -循环语句 Circulation
- Intellij IDEA常用设置