1、UVA624(记录路径问题)
2017-09-09 11:18
288 查看
1、UVA624(记录路径问题)
总得来说,不管是01背包还是完全背包,其动态转移每次只有两种状态在转移,就说这道题目,
dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+val[i]) 对于dp[i][j]来说,它只能使由两个状态中的一个转移过来的,要么取一件,要么不取,那么我们再开一个二维数组s[i][j],0表示不取,1表示取,那么不取是dp[i-1][j],取是dp[i-1][j-v[i]]+val[i];这样,数组s[i][j]就记录下了每次动态转移的方向,在递归调用,打印路径,结果就出来了,具体可以看http://www.cnblogs.com/ziyi--caolu/archive/2013/04/10/3012578.html
#include<iostream>
#include<string.h>
#include<iomanip>
using namespace std;
#include<algorithm>
int dp[10005],w[10005],f[10005];
bool a[25][10005];
int c;
int n,m;
int main()
{
while(cin>>m>>n)
{
memset(a,false,sizeof(a));
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
cin>>w[i];
for(int i=1;i<=n;i++)
for(int j=m;j>=w[i];j--)
{
dp[j]=max(dp[j],dp[j-w[i]]+w[i]);
if(dp[j]==dp[j-w[i]]+w[i])
a[i][j]=true;
}
int c=0;
for(int i=n,j=dp[m];j>0&&i>0;i--)
{
if(a[i][j])
{
f[c++]=w[i];
j-=w[i];
}
}
for(int i=c-1;i>=0;i--)
cout<<f[i]<<" ";
cout<<"sum:"<<dp[m]<<endl;
}
return 0;
}
总得来说,不管是01背包还是完全背包,其动态转移每次只有两种状态在转移,就说这道题目,
dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+val[i]) 对于dp[i][j]来说,它只能使由两个状态中的一个转移过来的,要么取一件,要么不取,那么我们再开一个二维数组s[i][j],0表示不取,1表示取,那么不取是dp[i-1][j],取是dp[i-1][j-v[i]]+val[i];这样,数组s[i][j]就记录下了每次动态转移的方向,在递归调用,打印路径,结果就出来了,具体可以看http://www.cnblogs.com/ziyi--caolu/archive/2013/04/10/3012578.html
#include<iostream>
#include<string.h>
#include<iomanip>
using namespace std;
#include<algorithm>
int dp[10005],w[10005],f[10005];
bool a[25][10005];
int c;
int n,m;
int main()
{
while(cin>>m>>n)
{
memset(a,false,sizeof(a));
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
cin>>w[i];
for(int i=1;i<=n;i++)
for(int j=m;j>=w[i];j--)
{
dp[j]=max(dp[j],dp[j-w[i]]+w[i]);
if(dp[j]==dp[j-w[i]]+w[i])
a[i][j]=true;
}
int c=0;
for(int i=n,j=dp[m];j>0&&i>0;i--)
{
if(a[i][j])
{
f[c++]=w[i];
j-=w[i];
}
}
for(int i=c-1;i>=0;i--)
cout<<f[i]<<" ";
cout<<"sum:"<<dp[m]<<endl;
}
return 0;
}
相关文章推荐
- UVA624(dp记录路径问题)
- UVA 624 记录路径的0-1背包
- uva 624 CD(01背包 路径记录)
- Uva624(记录路径的01背包)
- 【DP】UVA 624 CD 记录路径
- UVA 624 CD (01背包+打印路径 或 dfs+记录路径)
- UVA 624(记录路径)
- UVA 624 CD(01背包,要记录路径)
- UVA 624(01背包记录路径)
- UVA 624 CD(01背包+记录路径)
- UVA 624 CD(01背包/记录路径)
- UVA-624 记录路径dp
- UVa - 624 - CD(0-1 + 记录路径)
- CD - UVa 624 01背包记录路径
- uva 116 动态规划 多阶段决策问题 路径记录 lrj-P270
- Uva624 CD (记录路径)
- uva 624 CD(记录路径)
- 【uva】624 CD【背包记录路径】
- UVA - 624 (01背包,记录路径)
- 【DP】UVA 624 CD 记录路径