SRM403 div2 hard

丸写し上等!
・・・・・・・解けへんかった

#include <algorithm>
#include <utility>
#include <vector>

#define INF (1<<29)
using namespace std;

class TheSumOfLuckyNumbers
{
	public:

		int DP[1000000+1];
		
		bool isLucky(int n)
		{
			while(0<n)
				if(n%10!=4 && n%10!=7)
					return false;
				else
					n/=10;
			return true;
		}

		vector <int> sum(int n)
		{
			vector<int> v;
			for(int i=1;i<1000000;i++)
				if(isLucky(i))
					v.push_back(i);
			for(int i=0;i<=1000000;i++)
				DP[i]=INF;
			DP[0]=0;
			for(int i=0;i<=1000000;i++)
				for(int j=0;j<v.size();j++)
					if(0<=i-v[j])
						DP[i]=min(DP[i],DP[i-v[j]]+1);

			int cnt=DP[n];
			vector<int> ans;
			if(cnt==INF)
				return ans;

			while(0<cnt)
			{
				int i;
				for(i=0;;i++)
					if(DP[n-v[i]]==cnt-1)
						break;
				ans.push_back(v[i]);
				n-=v[i];
				cnt--;;
			}

			return ans;
		}
};