USACO 2.1.4Healthy Holsteins
2011-07-16 12:00
253 查看
// holstein.cpp : 定义控制台应用程序的入口点。 // /* ID: maiyuet1 PROG: holstein LANG: C++ */ //#include "stdafx.h" /* 直接DFS,N <= 15;每种只有2种情况,拿或不拿,2^15*/ #include <iostream> #include <cstring> #include <string> #include <cstdio> using namespace std; int need[30]; //最少所需 int value[30][30]; int ans[30]; int ans_cnt; int n,m; int used[30]; //满足牛的最少需求 int judge(int temp[]) { for(int i=1; i<=n; i++) { if(temp[i] < need[i]) { return 0; } } return 1; } //是否能作为最优解 int judge1(int flag[], int cnt) { for(int i=1; i<=cnt; i++) { if(flag[i] > ans[i]) { return 0; } } return 1; } void dfs(int temp[],int k, int cnt, int flag[]) { //剪枝,数量比最优解大,直接返回 if(cnt > ans_cnt) { return ; } //在满足牛的最低需求情况下,如果数量比最优解小 或者 字典序比最优解小则更新) if(judge(temp) && (cnt < ans_cnt || judge1(flag,cnt))) { for(int i=1; i<=cnt; i++) { ans[i] = flag[i]; } ans_cnt = cnt; return ; } int lishi[30]; //局部变量lishi保存起来,以便回溯使用 for(int i=1; i<=n; i++) { lishi[i] = temp[i]; } for(int i=k+1; i<=m; i++) { if(!used[i]) { used[i] = 1; for(int j=1; j<=n; j++) { temp[j] += value[i][j]; } flag[cnt+1] = i; dfs(temp,i,cnt+1,flag); //回溯 used[i] = 0; for(int j=1; j<=n; j++) { temp[j] = lishi[j]; } } } } int main() { freopen("holstein.in","r",stdin); freopen("holstein.out","w",stdout); ans_cnt = 1000; cin>>n; for(int i=1; i<=n; i++) { cin>>need[i]; } cin>>m; for(int i=1; i<=m; i++) { for(int j=1; j<=n; j++) { cin>>value[i][j]; } } int temp[30]; int flag[30]; memset(temp,0,sizeof(temp)); memset(flag,0,sizeof(flag)); dfs(temp,0,0,flag); cout<<ans_cnt; for(int i=1; i<=ans_cnt; i++) { cout<<" "<<ans[i]; } cout<<endl; return 0; }
相关文章推荐
- usaco Healthy Holsteins individual report
- USACO Healthy Holsteins DFS
- USACO Healthy Holsteins
- USACO Healthy Holsteins(二进制枚举子集)
- USACO / Healthy Holsteins (经典的DFS题目)
- USACO 2.1 Healthy Holsteins <0/1枚举>
- USACO Healthy Holsteins
- 加上减去DFS解决USACO Healthy Holsteins
- usaco Healthy Holsteins
- usaco Healthy Holsteins
- USACO Healthy Holsteins
- USACOTrainning.Healthy Holsteins
- USACO Healthy Holsteins 健康的好斯坦奶牛
- usaco Healthy Holsteins
- [USACO 1.5] 跳棋的挑战
- bzoj1593&poj3667 【Usaco2008 Feb】Hotel
- 大力stl——P2202 [USACO13JAN]方块重叠Square Overlap
- USACO section 3.1 Contact(AC自动机)
- USACO skidesign
- USACO Section 1.5 Prime Palindromes