Nyoj 791

#include #include #include using namespace std; int main() { int V, i, j; int arr[10]; while(~scanf("%d", &V)) { int MIN = 0xfffffff; for(i = 0; i <= 8; ++i) ...
阅读(592) 评论(0)

Nyoj 737 石子合并(一)

#include #include #include #include using namespace std; const int MAXN = 210; const int INF = 0xffffff; int dp[MAXN][MAXN]; int sum[MAXN]; void Find_Ans(int n) { int num, i, j, k; for(...
阅读(1058) 评论(0)

Nyoj 712 探 寻 宝 藏

双线程dp,可以看成两个人同时从同一个地点出发沿着相同的方向出发,要保证保证两个人的线路不能相交!如果人1和人2在相同的行或者相同列,那么他们一定会在相同的列或者行,因此保证他们不在相同的行,就可以保证他们的线路不会相交! dp[k][i][j] 表示:走到第k步,机器人1走到第i行,机器人2走到第j行时所得到的最大的宝藏数!机器人1所在的列就表示成k-i,同理机器人2所在的列就为k-j,其中k...
阅读(557) 评论(0)

Nyoj 708 Ones

#include #include #include using namespace std; const int MAXN = 10010; int dp[MAXN]; int MIN(int a, int b) { return a < b ? a : b; } void Pre_Solve() { dp[1] = 1; dp[2] = 2; f...
阅读(667) 评论(0)

Nyoj 613 免费馅饼

#include #include #define MAXN 100010 int MAX(int a, int b, int c) { return ((a > b ? a : b) > c ? (a > b ? a : b) : c); } int main() { int dp[MAXN][13]; int n; int T, locate; ...
阅读(655) 评论(0)

Nyoj 571 整数划分

第一行:将n划分成若干个正整数之和的划分数        我们设dp[i][j] 表示将正整数i划分成最大数不超过数j的划分数,显然我们有:        (1):如果划分的数中至少有一个有j,则有:dp[i][j] = dp[i-j][j];        (2):如果划分的数中没有j,则有:dp[i][j] = dp[i][j-1];        因此有:dp[i][...
阅读(526) 评论(0)

Nyoj 456

#include #include #include using namespace std; const int MAXN = 12; int num[MAXN]; int totalvalue; bool DFS(int sum) { if(sum == totalvalue) return true; for(int i = 10; i >=...
阅读(502) 评论(0)

Nyoj 515 完全覆盖 II

详细可以参考:http://blog.csdn.net/hearthougan/article/details/22077391 #include #include #include using namespace std; typedef long long LL; LL dp[12][1<<12]; int m, k; void Pre_Slove(int j, int cu...
阅读(693) 评论(0)

Nyoj 492 king

跟铺砖问题或者棋盘分割问题差不多,相同的思路来做! 首先交代一下DFS中变量的含义:i, j, curstatus, prestatus, num, b分别为:当前所在的行,j当前所在的列, curstatus当前所在行的状态,prestatus当前所在列所在行的前一行状态,num,本行放置king的方案数, b本行本列的放置是否对下一列有影响。 dp[i][curstatus][num]:表...
阅读(571) 评论(0)

Nyoj 469 擅长排列的小明 II

/** 由于第一个只能是1,则第二个数只能是2,3 当第二个数是2时,则相当于是对2-n的排列,相当于对1-(n-1)的排列,即arr[n-1]; 当第二个数是3时,第三个数只能是2,4,5 此时,当第三个数为2时,则是对3-n的排列,相当于对1-(n-3)的排列,即arr[n-3]    当第三个数为4时,此时,第四个数只能是2,除了n等于4时,对于n大于4的排列,都不符合要求,    而n为...
阅读(448) 评论(0)

Nyoj 456 邮票分你一半

深搜超时了,但是http://blog.csdn.net/hearthougan/article/details/21940999这个题,却可以! 只有利用0-1背包的思想来求解了; 0-1解法:#include #include #include using namespace std; const int MAXN = 1010; int MAX(int a, int b) {...
阅读(460) 评论(0)

Nyoj 435 棋盘分割(二)

主要还是参考周伟同学写的状态压缩思想:http://download.csdn.net/detail/hearthougan/7045453 另外可以参考一下相对简单的同类型题:http://blog.csdn.net/hearthougan/article/details/22077391 首先交代一下所要用得到几个变量:i, j, curstatus, prestatus, b1, b2;...
阅读(434) 评论(0)

poj 2411 zoj1100

参考周伟的论文:http://download.csdn.net/detail/hearthougan/7045453 第i行的铺设方法,例如(i, j)位置的铺设受到(i-1,j), (i, j-1)影响,因此(i, j)的铺设可能影响到(i-1, j+1), (i, j+1)位置的铺设.首先交代几个变量的含义: j, curstatus, prestatus,分别表示当前为第j列,当前第i...
阅读(925) 评论(0)

Nyoj 325

//利用搜索来实现在均分(意思就是这个人的多少,多方就得多少)的情况下,使得两堆误差最小(总的质量之和减去两者均分量之和,就是在此种均分情况下的两堆差量)!#include #include #include using namespace std; const int MAXN = 25; int arr[MAXN]; int minnum, n; int total; int fa...
阅读(412) 评论(0)

NYOJ 289 (0-1背包)

#include #include #include using namespace std; const int MAXN = 1010; int MAX(int a, int b) { return a > b ? a : b; } int dp[MAXN]; int V; void Zero_One_Pack(int cost, int Price) { f...
阅读(650) 评论(0)
68条 共5页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:280286次
    • 积分:7304
    • 等级:
    • 排名:第3352名
    • 原创:471篇
    • 转载:19篇
    • 译文:0篇
    • 评论:18条