codeforces 3B Lorry 贪心
2012-12-07 15:47
423 查看
背包问题的贪心,因为每个物品的重量是1或是2,最优组合也是1和2物品的组合,所以枚举重量是1的物品的组合和重量是2的物品的组合的组合,选最优的组合即可
#include<stdio.h> #include<string.h> #include<stdlib.h> #define size 5; struct node{ int p; int id; }; node v1[100005],v2[100005]; int q; int s1[100005],s2[100005]; int cmp(const void*a,const void*b) { node*c=(node*)a; node*d=(node*)b; if(c->p < d->p) return 1; else return -1; } int main() { int i,j,k,l,m,n,v; int n1=0,n2=0; memset(s1,0,sizeof(s1)); memset(s2,0,sizeof(s2)); scanf("%d %d",&n,&v); for(i=1;i<=n;i++) { scanf("%d %d",&j,&m); if(j==1) { v1[n1].id=i; v1[n1++].p=m; } else { v2[n2].id=i; v2[n2++].p=m; } } qsort(v1,n1,sizeof(v1[0]),cmp); qsort(v2,n2,sizeof(v2[0]),cmp); s1[0]=0;s2[0]=0; s1[1]=v1[0].p;s2[1]=v2[0].p; for(i=1;i<n1;i++) { s1[i+1]=v1[i].p+s1[i]; } for(i=1;i<n2;i++) { s2[i+1]=v2[i].p+s2[i]; } int max[3]={-1,-1,-1}; int t1,t2; for(i=0;i<=n1;i++) { int t2; if(i>v) break; t2=(v-i)/2; if(t2>n2) t2=n2; if(s1[i]+s2[t2]>max[0]) { max[0]=s1[i]+s2[t2]; max[1]=i; max[2]=t2; } } printf("%d\n",max[0]); for(i=0;i<max[1];i++) printf("%d ",v1[i].id); for(i=0;i<max[2];i++) printf("%d ",v2[i].id); printf("\n"); return 0; }
相关文章推荐
- Codeforces 3B Lorry 贪心
- CodeForces 3B Lorry(贪心背包)
- codeforces-#472B. Design Tutorial: Learn from Life(贪心)
- CodeForces - 747D Winter Is Coming ——贪心
- 【CodeForces 777E】 Hanoi Factory(贪心+sort+模拟)
- Codeforces 449C 贪心
- CodeForces 363D.Renting Bikes(二分+贪心)
- 贪心-CodeForces 913C
- 【CodeForces】500B - New Year Permutation(Floyd)(贪心)
- CodeForces - 913C(贪心)
- codeforces 722D Generating Sets (二叉树 + 贪心)
- Codeforces 723c [贪心][乱搞]
- CodeForces 624 B. Making a String(贪心)
- CodeForces - 725D Contest Balloons 贪心
- CodeForces 398A Cards 贪心 暴力 瞎搞
- codeforces 26C Parquet 贪心 模拟
- Codeforces 429C Guess the Tree(状压DP+贪心)
- Codeforces 675E Trains and Statistic(DP + 贪心 + 线段树)
- CodeForces - 757B . Bash's Big Day - 贪心+暴力...也可因子数分解
- CodeForces - 731C Socks(并查集)(贪心)