hdu_1800
简单排一下序,从大开始把比他小的都访问一遍,ans++;
#include <iostream> #include <stdio.h> #include <algorithm> using namespace std; struct dat { int level; int visit; }data[3200]; bool cmp(dat a, dat b) { return a.level > b.level; } int main() { int n; while(scanf("%d", &n)!=-1) { for(int i=0; i<n; i++) { scanf("%d", &data[i].level); data[i].visit=0; } sort(data, data+n, cmp); int ans=0; for(int i=0; i<n; i++) { if(!data[i].visit) { data[i].visit=1; int temp=i; ans++; for(int j=0; j<n; j++) { if(!data[j].visit && data[temp].level>data[j].level) { data[j].visit=1; temp=j; } } } } printf("%d\n", ans); } return 0; }
hdu_2124
排个序,用 l 从大开始减去block的大小,记录用的block块数, 最后 l > 0 , 则输出impossible,否则输出块数。
#include <iostream> #include <stdio.h> #include <algorithm> using namespace std; bool cmp(int a, int b) { return a>b; } int main() { int l, n, block[1000]; while(scanf("%d%d", &l, &n)!=-1) { for(int i=0; i<n; i++) { scanf("%d", &block[i]); } sort(block, block+n, cmp); int ans=0; for(int i=0; i<n && l!=0; i++) { if(l>=block[i]) { l-=block[i]; ans++; } else { l=0; ans++; break; } } if(l!=0) printf("impossible\n"); else printf("%d\n", ans); } return 0; }
原文地址:https://www.cnblogs.com/Dawn-bin/p/10801743.html
时间: 2024-10-17 15:07:08