題目大意:
題意同hdu 3092這不過這題要輸出路徑。
解題思路:
思路同hdu 3092。
因為n比較大,不能開二維只記錄前面乙個來 逆著存路徑。
所以對於每個狀態,把到達它的所有數都儲存下來。轉移的時候將前面的路徑也賦值過來。
dp[i]表示表示不超過i的能分成的最大的最小公倍數的對數。少了的話用1來湊。
注意:輸出的時候值小的在前面,+1成環輸出。
**:#include#include#include#include#include#include#include#include#include#include#include#include#include#define eps 1e-6
#define inf 0x3fffffff
#define pi acos(-1.0)
#define ll __int64
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
#pragma comment(linker, "/stack:1024000000,1024000000")
using namespace std;
#define maxn 10000 //三千內的質數430個
double dp[maxn+10]; //取對數保證最小公倍數不會溢位
//dp[i]表示i能分成的最大的最小公倍數的對數
bool tmp[maxn+10];
int pp[maxn+10],ans[maxn+10];
vectormyv[maxn+10];
int n,cnt;
void init()
}return ;
}void solve()}}
}int main()
{ init();
//printf("%d\n",cnt);
int t;
scanf("%d",&t);
while(t--)
{scanf("%d",&n);
solve();
int t=myv[n].size();
int sum=0;
for(int i=0;i
DP 路徑記錄
題意 很多肥老鼠認為,長的越肥,奔跑速度就越快,為了反駁這個觀點,你現在需要對老鼠的體重和速度進行研究,你要在老鼠序列中找出乙個子串行,使得老鼠的體重在增加,但是速度卻在減慢 input 輸入以eof結束。輸入中每行有兩個正整數,分別表示老鼠的體重和速度,範圍均在1到10000之間,輸入資料最多有1...
poj3003 2397 DP 記錄路徑
這兩題是一模一樣的 最近做了好多這種揹包的題,但是這題需弄清的地方還是不少,有些繞 f陣列其實是可以省的 include define oo 10000000 using namespace std int cas,n,a 1010 p,q,dp 2 1010 pre 41 1010 bool f ...
UVA 624 記錄路徑dp
總得來說,不管是01揹包還是完全揹包,其動態轉移每次只有兩種狀態在轉移,就說這道題目,dp i j max dp i 1 j dp i 1 j v i val i 對於dp i j 來說,它只能使由兩個狀態中的乙個轉移過來的,要麼取一件,要麼不取,那麼我們再開乙個二維陣列s i j 0表示不取,1表...