本文共 1749 字,大约阅读时间需要 5 分钟。
题目链接:
题目大意:
N个人,每个人有pi个物品,每个物品价值为0~49。每次从1~n顺序选当前这个人的物品,如果这个物品的价值>=之前所有物品价值和则加上这个物品,否则这个物品舍弃不计算在内。
总共拿出K个物品,如果一个人没物品拿了那么他会拿出价值为50的物品。求最终物品价值和有多少。
题目思路:
【模拟】
直接暴力枚举。判断是否超过之前的总和,如果有人拿了50则后面的人肯定都是拿50。
1 // 2 //by coolxxx 3 //#include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 //#include 19 #include 20 #define min(a,b) ((a)<(b)?(a):(b))21 #define max(a,b) ((a)>(b)?(a):(b))22 #define abs(a) ((a)>0?(a):(-(a)))23 #define lowbit(a) (a&(-a))24 #define sqr(a) ((a)*(a))25 #define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))26 #define mem(a,b) memset(a,b,sizeof(a))27 #define eps (1e-8)28 #define J 1029 #define mod 100000000730 #define MAX 0x7f7f7f7f31 #define PI 3.1415926535897932332 #define N 10433 using namespace std;34 typedef long long LL;35 int cas,cass;36 int n,m,lll,ans;37 int a[N][N];38 int sum,total;39 int main()40 {41 // freopen("easy.in","r",stdin);42 // freopen("easy.out","w",stdout);43 int i,j,k;44 45 // for(scanf("%d",&cass);cass;cass--)46 // for(scanf("%d",&cas),cass=1;cass<=cas;cass++)47 // while(~scanf("%s",s+1))48 while(~scanf("%d",&n))49 {50 mem(a,0);sum=0,total=0;51 scanf("%d",&m);52 for(i=1;i<=n;i++)53 {54 scanf("%d",&a[i][0]);55 for(j=1;j<=a[i][0];j++)56 {57 scanf("%d",&a[i][j]);58 }59 }60 for(j=1;j<=10 && total!=m;j++)61 {62 for(i=1;i<=n && total!=m;i++)63 {64 if(j>a[i][0])65 {66 sum+=50;67 total++;68 continue;69 }70 if(a[i][j]>=sum)71 {72 sum+=a[i][j];73 total++;74 }75 }76 }77 if(total
转载于:https://www.cnblogs.com/Coolxxx/p/5822432.html