poj1014數據很奇怪DISCUSS更奇怪

寫了一個多小時的DFS感覺對了各種WA,進discuss找數據發現神奇取模方法,不過這個取模方法明顯有問題,再找了別人的DFS秒殺代碼,感覺他們的代碼也明顯有問題,我自己試了好多數據都是對的可是就是WA,還是用DP寫的好,不會WA。
但是也不是簡單的DP,求可達的範圍那個DP其實和DFS是一樣的,大不了沒有用遞歸來實現,好像多重揹包纔是正解。

附上我的喫屎代碼,迷之WA

#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
int data[20010],a[20010],n,k,sum,Case=0,anssum;
bool dfs(int remain,int cur);
void nosolve()
{
   cout << "Collection #" << Case << ':' << endl;
            cout << "Can't be divided." << endl << endl;

}
void solved()
{
    cout << "Collection #" << Case << ':' << endl;
            cout << "Can be divided." << endl << endl;

}
void findsolve()
{
     int anssum;
     bool flag;
    anssum=sum/2;
    n=0;
    for (int i=6;i>=1;i--)
    if (flag==false)
    if (dfs(anssum,i))
    {
            solved();
            flag=true;
    }
    if (flag==false) nosolve();
}
bool dfs(int remain,int cur)
{
   int num;

   for (num=a[cur];num>=1;num--)
   if (remain-cur*num>=0)
    {
        //cout<<remain<<" "<<cur<<endl;
         if (remain-cur*num<0) continue;
         if (remain-cur*num==0) {  return true;}
         for (int i=cur-1;i>=1;i--)
            if (dfs(remain-cur*num,i)) return true;


    }
     return false;
}
int main()
{

    while (cin>>a[1]>>a[2]>>a[3]>>a[4]>>a[5]>>a[6]&&(a[1]+a[2]+a[3]+a[4]+a[5]+a[6]))
    {


        Case++;
        sum=0;
        for (int i=1;i<=6;i++) sum=sum+a[i]*i;
        if (sum%2==1) nosolve();
        else findsolve();

    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章