2015-01-24 03:16:28
思路:仅div2场,4000+人....
为了模拟div1气氛,先开了C,发现就是找规律乱搞....不幸细节写错wa两发,30+min才过的。。之后快速搞定了A、B。
E题的话...知道就是个双权最短路...硬是被我写成记忆化搜索...后来才发现不是DAG,不能用DP求最短路!!!(太逗比了...)。。。赛后用Spfa搞掉了QAQ。。
D题是个数位DP...
A:结构体排序
1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cmath> 5 #include <vector> 6 #include <map> 7 #include <set> 8 #include <stack> 9 #include <queue> 10 #include <string> 11 #include <iostream> 12 #include <algorithm> 13 using namespace std; 14 15 #define MEM(a,b) memset(a,b,sizeof(a)) 16 #define REP(i,n) for(int i=1;i<=(n);++i) 17 #define REV(i,n) for(int i=(n);i>=1;--i) 18 #define FOR(i,a,b) for(int i=(a);i<=(b);++i) 19 #define RFOR(i,a,b) for(int i=(a);i>=(b);--i) 20 #define MP(a,b) make_pair(a,b) 21 22 typedef long long ll; 23 typedef pair<int,int> pii; 24 const int INF = (1 << 30) - 1; 25 26 int n,k,an[1000]; 27 struct node{ 28 int a,id; 29 }no[1000]; 30 31 bool cmp(node aa,node bb){ 32 return aa.a < bb.a; 33 } 34 35 int main(){ 36 scanf("%d%d",&n,&k); 37 REP(i,n){ 38 scanf("%d",&no[i].a); 39 no[i].id = i; 40 } 41 sort(no + 1,no + n + 1,cmp); 42 int ans = 0; 43 REP(i,n){ 44 k -= no[i].a; 45 if(k < 0) break; 46 ans++; 47 an[i] = no[i].id; 48 } 49 printf("%d\n",ans); 50 if(ans == 0) return 0; 51 REP(i,ans - 1) printf("%d ",an[i]); 52 printf("%d\n",an[ans]); 53 return 0; 54 }