本来是想当dp题来写的, 但是写了之后发现果然还是贪心好写啊...
结果正常的程序就写成这样了233
/*POJ 2969 Divisibility by 15*/
#include <stdio.h>
#include <stdlib.h>
#define For(i,m,n) for(i=(m);i<(n);i++)
int cnt[10];
main()
{
int i=0, j, flag=0, sum=0, v=0, s;
char ch;
while(scanf("%c",&ch)!=EOF&&ch!='\n') cnt[ch-'0']++, sum+=ch-'0';
sum%=3;
if(!cnt[0]&&!cnt[5]) puts("impossible");
else{
if(!cnt[0]) cnt[5]--, flag=1;
if(sum) {
s=sum;
if(cnt[sum]+cnt[sum+3]+cnt[sum+6]==0) s=3-sum;
for(i=s;i<9;i+=3){
if(cnt[i]) cnt[i]--, sum=(sum+3-s%3)%3;
if(cnt[i]&&sum) cnt[i]--, sum=0;
if(!sum) break;
}
}
For(j,1,10) v+=cnt[j];
if(v==0||i>=9){
if(cnt[0]) puts("0");
else puts("impossible");
exit(0);
}
for(i=9;i>=0;i--){
j=cnt[i];
while(j--) printf("%d",i);
}
if(flag) printf("5");
puts("");
}
return 0;
}