Hdu 4517 小小明系列故事 遊戲的煩惱

2022-04-09 12:58:13 字數 3101 閱讀 6886

第一種解法:

遍歷求解。num[i][j]代表i行j列之前一共有多少個''。然後再面積夾擊求解x*y、y*x是否滿足,x==y只需要判斷一次。

這種方法提交用c++,不要用g++,否則會超時。

[cpp]

#include   

#include   

#include   

#include   

#include   

#include   

#include   

#include   

using namespace std; 

int map[2005][2005]; 

int num[2005][2005]; 

int main() 

} scanf(" %d %d",&x,&y); 

getchar(); 

for(int i=1; i<=n; i++) 

else 

} getchar(); 

} for(int i=1; i<=n; i++) 

else 

} } 

int ans = 0; 

int size = x*y; 

for(int i=x; i<=n; i++) 

} } 

if(x!=y) 

} } 

} printf("%d\n",ans); 

} return 0; 

} #include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

int map[2005][2005];

int num[2005][2005];

int main()

}scanf(" %d %d",&x,&y);

getchar();

for(int i=1; i<=n; i++)

else

}getchar();

}for(int i=1; i<=n; i++)

else}}

int ans = 0;

int size = x*y;

for(int i=x; i<=n; i++)}}

if(x!=y)}}

}printf("%d\n",ans);

}return 0;

}第二種方法:

二維dp,但是會mle。

[cpp] view plaincopyprint?#include   

#include   

#include   

#include   

#include   

#include   

#include   

#include   

using namespace std; 

int map[2005][2005]; 

int h[2005][2005]; 

int l[2005][2005]; 

int l2[2005][2005]; 

int main() 

getchar(); 

} int ans = 0; 

for(int i=1; i<=n; i++) 

else 

} } 

printf("%d\n",ans); 

} return 0; 

} #include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

int map[2005][2005];

int h[2005][2005];

int l[2005][2005];

int l2[2005][2005];

int main()

getchar();

}int ans = 0;

for(int i=1; i<=n; i++)

else}}

printf("%d\n",ans);

}return 0;

}第三種:

改成滾動陣列,變成一維dp。

[cpp]

#include   

#include   

#include   

#include   

#include   

#include   

#include   

#include   

using namespace std; 

int map[2005][2005]; 

int h[2005]; 

int l[2005]; 

int l2[2005]; 

int main() 

getchar(); 

} int ans = 0; 

for(int i=1; i<=n; i++) 

else 

} } 

printf("%d\n",ans); 

} return 0; 

} #include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

int map[2005][2005];

int h[2005];

int l[2005];

int l2[2005];

int main()

getchar();

}int ans = 0;

for(int i=1; i<=n; i++)

else}}

printf("%d\n",ans);

}return 0;} 

小明系列故事 買年貨(HDU)

題意理解 有n個可以買的年貨,每個年貨有單價,抵扣的積分和實際的價值,小明手裡有v1的錢,v2的積分,可免費的年貨數量k。問如何買才能使年貨總的價值最大?問題分析 多維01揹包問題,用dp。動態規劃要找狀態,然後找狀態轉移方程。對於本題,狀態是dp ii jj kk ll 表示前ii個年貨花了jj錢...

HDU 4528 小明系列故事 捉迷藏

小明的媽媽生了三個孩子,老大叫大明,老二叫二明,老三.老三自然就叫小明了。一天,小明的媽媽帶小明兄弟三人去公園玩耍,公園裡面樹木很多,有很多地方可以藏身,於是他們決定玩捉迷藏。經過幾輪的猜拳後,第一輪是小明來找其他兩個人,遊戲規則很簡單 只要小明可以在規定的時間內找到他們就算小明獲勝,並且被發現的兩...

HDU 4501 小明系列故事 買年貨

解題思路 三維揹包,設定dp i j k 代表有i塊錢,有j個積分和k個免費物品的時候,可以得到的最大價值。則對於當前物品,我有兩種選擇 第一種 不買 第二種 買 如果選擇買又分了三種情況,1.用錢買。dp i 錢 j k 價值 2.用積分買。dp i j 積分 k 價值 3.免費拿。dp i j ...