动态规划专项intermediate:LA 4015
来源:互联网 发布:淘宝的管理团队 编辑:程序博客网 时间:2024/05/16 07:40
被自己蠢哭了……已经想到是dfs里分组背包,可就是不知道怎么写,看题解才知道怎么做,然后细节和边界条件又想了半天才弄明白。
其实就是用dp[i][V][0]表示以i为根结点遍历V个点并回到i所需的最小能量,dp[i][V][1]表示以i为根节点遍历V个点(不需回到i)所需的最小能量。
然后就是分组背包了,然后还得注意边界条件,因为V个点作为物品必须全部取完,所以边界为dp[root][1][0]=dp[root][1][1]=0,否则赋为inf。
具体的状态方程就看代码吧。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int inf=1<<30;int n,e,q,s;int head[510],pnt[510],nxt[510],cost[510],in[510];void addedge(int u,int v,int c){ pnt[e]=v;cost[e]=c;nxt[e]=head[u];head[u]=e++;}int dp[510][510][2];int cnt[510];void dfs(int u){ dp[u][1][0]=dp[u][1][1]=0; cnt[u]=1; for(int i=head[u];i!=-1;i=nxt[i]) { int v=pnt[i]; dfs(v); cnt[u]+=cnt[v]; for(int V=cnt[u];V>1;V--) { for(int j=1;j<=V&&j<=cnt[v];j++) { dp[u][V][0]=min(dp[u][V][0],dp[u][V-j][0]+dp[v][j][0]+cost[i]*2); dp[u][V][1]=min(dp[u][V][1],dp[u][V-j][0]+dp[v][j][1]+cost[i]*1); dp[u][V][1]=min(dp[u][V][1],dp[u][V-j][1]+dp[v][j][0]+cost[i]*2); } } }}int main(){ freopen("in.txt","r",stdin); int kase=1; while(cin>>n&&n) { for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) dp[i][j][0]=dp[i][j][1]=inf; memset(head,-1,sizeof(head)); memset(in,0,sizeof(in)); e=0; for(int i=0;i<n-1;i++) { int u,v,c; cin>>u>>v>>c; addedge(v,u,c); in[u]++; } for(int i=0;i<n;i++) if(!in[i]) s=i; dfs(s); cout<<"Case "<<kase++<<":"<<endl; cin>>q; while(q--) { int x; cin>>x; int ans; for(int i=1;i<=n;i++) { if(x>=dp[s][i][0]||x>=dp[s][i][1]) ans=i; else break; } cout<<ans<<endl; } } return 0;}
- 动态规划专项intermediate:LA 4015
- 动态规划专项intermediate:LA 4490
- 动态规划专项intermediate:LA 4327
- 动态规划intermediate:LA 4945
- 动态规划intermediate:LA 6042
- 动态规划专项intermediate:UVa 10271
- 动态规划专项intermediate:UVa 10304
- 动态规划专项intermediate:UVa 11600
- 动态规划专项intermediate:UVa 10934
- 动态规划专项intermediate:UVa 10981
- 动态规划专项intermediate:UVa 12002
- 动态规划专项intermediate:UVa 10688
- 动态规划专项intermediate:UVa 11766
- 动态规划专项intermediate:UVa 11400
- 动态规划专项intermediate:UVa 10599
- 动态规划专项advanced:LA 4394
- 动态规划专项advanced:LA 4625
- 动态规划intermediate:UVa 11456
- 数据库操作通用类库 不管是sql server oracle mysql 还有别的都可以啊! 太强了
- 黑马程序员-ADO.net-SQL语句复习大全(二)
- 国内免费(开源)CMS系统大全
- 不健壮代码分析
- 在Java应用中嵌入sshd服务(续)
- 动态规划专项intermediate:LA 4015
- Ubuntu 11.04 DHCP server 和 ipv6 备忘
- Color the Ball
- viewpager的用法总结
- Windows使用技巧(以Windows7为例)
- Ubuntu12.04安装vim7.3
- java synchronized详解
- javascript学习实录 之五(节点操作) --刘小小尘
- hive列