
动态规划
文章平均质量分 59
wsxsd94
这个作者很懒,什么都没留下…
展开
-
UVA437 - The Tower of Babylon - 动态规划
这道题需要考虑到一个长方体三条边随意组合可以有六种摆放方式原创 2014-08-08 15:29:58 · 408 阅读 · 0 评论 -
POJ1988 - Cube Stacking - 并查集
并查集,带权,只需要find的时候更新原创 2014-08-12 18:39:37 · 456 阅读 · 0 评论 -
POJ3122 - Sum of Different Primes - 动态规划
完全背包问题,对物品和背包都有限制,原创 2014-08-12 12:12:14 · 515 阅读 · 0 评论 -
Hdu1176 - 免费馅饼 - 动态规划
数塔变形题第0秒 5 第1秒 4 5 6第2秒 3 4 5 6 7第3秒 2 3 4 5 6 7 8第4秒 1 2 3 4 5 6 7 8 9第原创 2014-08-10 14:07:27 · 518 阅读 · 0 评论 -
POJ3230 - Travel - 动态规划
状态转移方程是dp[i][j]=max(dp[i][j],dp[i-1][k]+inc[i][j]-co[k][j]);#include#includeint dp[105][105];//第i天在j城市的最大收入int inc[105][105];//i天在j城市的收入int co[105][105];//从i城市到j城市花费int main(){ int m,n; whil原创 2014-08-10 12:37:39 · 500 阅读 · 0 评论 -
POJ2346 - Lucky tickets - 动态规划
感觉是典型的背包dp[i][j]+=dp[]原创 2014-08-10 08:48:14 · 571 阅读 · 0 评论 -
Hdu1059 - Dividing - 动态规划
这道题主要还是二分比较重要,否则TLE#include#includeint dp[100000];int v[7];int main(){ int cas=0; while(scanf("%d%d%d%d%d%d",&v[1],&v[2],&v[3],&v[4],&v[5],&v[6])!=EOF) { cas++; if(!原创 2014-08-09 17:04:13 · 637 阅读 · 0 评论 -
Hdu1159 - Common Subsequence - 动态规划
最基本的LCS,懂了原理很简单#include#includeint dp[1000][1000];int main(){ char str1[1000]; char str2[1000]; while(scanf("%s %s",str1+1,str2+1)!=EOF) { int i,j; int t1=strlen(str1); int t2=strlen(s原创 2014-08-10 10:20:26 · 413 阅读 · 0 评论 -
UVA10534 - Wavio Sequence - 动态规划
这个题一开始我用朴素的dp做,TLE了- -,然后百度原创 2014-08-09 13:41:23 · 503 阅读 · 0 评论 -
UVA11584 - Partitioning by Palindromes - 动态规划
#include#includechar ch[1005];int dp[1005];int min(int a,int b){ return a<b?a:b;}int pand(int a,int b){ while(a<b) { if(ch[a]!=ch[b]) { return 0; } a++; b--; } return 1;}in原创 2014-08-07 19:17:40 · 435 阅读 · 0 评论 -
URAL1005 - Stone Pile - 动态规划
01背包,看成总石头质量的一半的背包,因为一般zhuangxiade原创 2014-08-08 16:46:20 · 721 阅读 · 0 评论 -
UVA11404 - Palindromic Subsequence - 动态规划
这道题思路是找最少去掉几个字符可以构成回文,那么就可以倒序之后求LCS,注意,只需要原创 2014-08-08 10:56:28 · 578 阅读 · 0 评论 -
Hdu2089 - 不要62 - 数位dp
#include#includeint dp[10][3];/*dp[i][0]为位数小于等于i且不含62也不含4的数字的个数dp[i][1]为位数为i且首位为2且不含62也不含4的数字的个数dp[i][2]为位数小于等于i且含62或4的数字的个数*/int digit[10];void er(){dp[0][0]=1;for(int i=1;i<=10;i++){dp[i][0]=dp[i-1]原创 2014-07-11 11:39:42 · 510 阅读 · 0 评论 -
Hdu3555 - Bomb - 数位dp
#include#include__int64 dp[30][3];/*dp[i][0]为位数小于等于i且不含49的数字的个数dp[i][1]为位数为i且首位为9且不含49的数字的个数dp[i][2]为位数小于等于i且含49的数字的个数*/__int64 digit[30];void er(){ memset(dp,0,sizeof(dp)); dp[0][0]=1; fo原创 2014-07-12 09:36:10 · 444 阅读 · 0 评论 -
URAL1009 - K-based Numbers - 数位dp
非常水,其实只是用数位dp的想法想了一下,考虑第一位0还是1就行了#includeint dp[20];int main(){ int n,k; while(scanf("%d%d",&n,&k)!=EOF) { dp[0]=k-1; dp[1]=(k-1)*k; for(int i=2;i<n;i++) { dp[i]=(k-1)*(dp[i-1]+dp[i原创 2014-08-07 17:43:45 · 481 阅读 · 0 评论 -
Hdu3038 - How Many Answers Are Wrong - 并查集
并查集,左端点并到右端点里,原创 2014-08-12 18:36:21 · 438 阅读 · 0 评论