标签:void amp any script pac cap 超时 ati range
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3448
Description
Input
Output
Sample Input
5 100 8 8 64 17 23 91 32 17 12 5 10 3 99 99 99
Sample Output
99 0
01背包,但是整个空间状态太大,开不了那么大是数组,就算能开那么大的数组也会超时。
二题目中的物品件数又比较少,所以我们可以用搜索写。
//还是写的题目太少了,见的也太少了,遇到这样的题目根本想不到用搜索。anyway加油吧!
代码:
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int n,m,k,ans; int a[45]; void dfs(int t,int i,int x) { ans=max(ans,x); if(i>k) return; if(t+1<=n && x+a[i]<=m) dfs(t+1,i+1,x+a[i]); dfs(t,i+1,x); } bool cmp(int a,int b){return a>b;} int main() { while(scanf("%d%d",&n,&m)==2) { scanf("%d",&k); memset(a,0,sizeof(a)); for(int i=1; i<=k; i++)scanf("%d",&a[i]); sort(a+1,a+1+k,cmp); int sum=0; for(int i=1;i<=n;i++)sum+=a[i]; if(m>=sum){printf("%d\n",sum);continue;} ans=0; dfs(0,1,0); ///0---n,1---数组脚标,0---ans; printf("%d\n",ans); } return 0; }
标签:void amp any script pac cap 超时 ati range
原文地址:http://www.cnblogs.com/a-clown/p/6045234.html