洛谷P1460 健康的荷斯坦奶牛
2017-08-04 22:35
162 查看
解题思路:
首先想到的是搜索,搜索使用哪几种符合条件的饲料,找最小的花费。由于dfs的特点,先找到的方案一定是字典序最小的。
但是暴力搜索会超时,需要剪枝,详见注释
首先想到的是搜索,搜索使用哪几种符合条件的饲料,找最小的花费。由于dfs的特点,先找到的方案一定是字典序最小的。
但是暴力搜索会超时,需要剪枝,详见注释
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,m,v[35],a[35][35],ans=1e9,cnt,t,c[35],top[35]; void dfs(int x,int sum){ bool flag=0; for (int i=1;i<=n;i++) if (v[i]>0) {flag=1;break;}//边界条件,要使每个v[i]都<0; if (!flag){ if (sum<ans){//最优性剪枝 ans=sum; t=cnt; for (int i=1;i<=cnt;i++) c[i]=top[i]; } return ; } for (int i=x+1;i<=m;i++){//从x+1搜索,不再搜索前边的,可行性剪枝 for (int j=1;j<=n;j++) v[j]-=a[i][j]; top[++cnt]=i; dfs(i,sum+1); --cnt;//回溯 for (int j=1;j<=n;j++) v[j]+=a[i][j];//回溯 } } int main(){ cin>>n; for (int i=1;i<=n;i++) scanf("%d",&v[i]); cin>>m; for(int i=1;i<=m;i++) for (int j=1;j<=n;j++) scanf("%d",&a[i][j]); dfs(0,0); cout<<t<<" "; for (int i=1;i<=t;i++) cout<<c[i]<<" "; return 0; }
相关文章推荐
- 【搜索】洛谷 P1460 健康的荷斯坦奶牛 Healthy Holsteins
- 洛谷 P1460 健康的荷斯坦奶牛 Healthy Holsteins
- 洛谷P1460 健康的荷斯坦奶牛 Healthy Holsteins
- P1460 健康的荷斯坦奶牛 Healthy Holsteins
- P1460 健康的荷斯坦奶牛 Healthy Holsteins
- [洛谷P4232]无意识之外的捉迷藏-线性规划-纳什均衡
- 智能腕带Amiigo通过识别出你的动作来全面监测你的健康和运动状况,将放出SDK
- 欧拉+逆元-洛谷P2155 [SDOI2008]沙拉公主的困惑
- 洛谷Oj-P1972 [SDOI2009]HH的项链-离线+树状数组
- Exadata健康检查与评估
- 洛谷 1330 封锁阳光大学
- 【BZOJ1458】【洛谷4311】士兵占领(网络流)
- 负载均衡VIP /LVS 的健康检测方式
- 洛谷 3654_First Step (ファーストステップ)_模拟
- 洛谷 1057 传球游戏
- 健康的使用鼠标
- P1025 数的划分(洛谷)DFS或者DP
- 洛谷 1203 [USACO1.1]坏掉的项链Broken Necklace
- 有害的健康生活习惯
- 洛谷 P1067 多项式输出