摘要:
1 #include 2 #include 3 #define N 200105 4 int f[N+10]; 5 int Max(int x,int y) 6 { 7 if(x>y) 8 return x; 9 return y;10 }11 int main()12 {13 int n,i,j,x,y;14 scanf("%d",&n);15 for(i=0;i0)24 {25 for(i=200000;i>=x;i--)26 {27 f... 阅读全文
posted @ 2013-07-16 19:06
zlyblog
阅读(190)
评论(0)
推荐(0)
摘要:
推荐链接http://blog.csdn.net/zizaimengzhongyue/article/details/9332121把排序的位置放错了,一直WA,不太细心f[i][j]含义: i 元可以买 j 种物品的方案数,方案数f[i]=f[i]+f[i-a[i]],很容易得到 f[i][j]=f[i][j]+f[i-a[i][j]; 1 #include 2 #include 3 #include 4 int cmp(const void *a,const void *b) 5 { 6 return *(int *)a-*(int *)b; 7 } 8 int main() 9 ... 阅读全文
posted @ 2013-07-16 16:30
zlyblog
阅读(263)
评论(0)
推荐(0)
摘要:
在求dp[i][j]的最优值的时候,我们比较了两个值的大小,一个是dp[i][j],一个是dp[i][j-b[i]]+a[i],之前我们直接抛弃掉其中一个,留下另一个就是dp[i][j],现在我们不将其抛弃,而是将其记录。准确的说我们以前比较dp[i][j]和dp[i][j-b[i]]+a[i],从中求出第一名,现在我们比较的是dp[i][j][1...K]和dp[i][j-b[i]][1...k]+a[i],从中求出前K名。思路:分别记录 dp[i][j] 中前K个解,和 dp[i][j-b[i]]+a[i] 中前K个解,那么从两个最有K个解中找出前K个解,这样就得到要求的第K个最优解。注意 阅读全文
posted @ 2013-07-16 11:06
zlyblog
阅读(211)
评论(0)
推荐(0)
摘要:
这个题容易WA,一般不会注意高精度问题,但对于高精度的处理很有技巧。推荐http://www.cnblogs.com/kuangbin/archive/2012/09/20/2695165.html里面给了五种方法,很不错在这里附上大神的代码 1 #include 2 #include 3 #include 4 using namespace std; 5 6 long long a[1100],b[1100],inf; 7 8 int main(){ 9 int n,k,i,j;10 for(inf=1,i=0;i<18;i++) inf*=10;11 sc... 阅读全文
posted @ 2013-07-16 10:33
zlyblog
阅读(258)
评论(0)
推荐(0)
摘要:
没想到排序,这点很重要,网上找的才知道排序后会避免在最后的范围内更新的值少计算。这个问题要求剩余的钱在大于这种物品某个值时才能购买这种物品,直接用01背包,不太实际。这里必须要求先处理较小价钱的物品,再处理大价钱物品,所以就要对Qi-Pi进行从小到大排序。这样在计算时不会影响后面范围的DP更新。 1 #include 2 #include 3 #include 4 using namespace std; 5 int b[505],f[5005]; 6 int max(int x,int y) 7 { 8 if(x>y) 9 return x;10 return... 阅读全文
posted @ 2013-07-16 10:28
zlyblog
阅读(248)
评论(0)
推荐(0)

浙公网安备 33010602011771号