USACO 3.3.2 Shopping Offers解题报告

写在前面:因为之前没写的C++的USACO Training的解题报告太多……所以就不写了,要是想要代码可以联系我:xiedong_1993@foxmail.com

这题就是传说中的五维背包,其实写起来难度不大。但是我写的时候可以说是遇到了重重困难。因为我对C++的掌握还不如Pascal,所以很多东西写的不是很熟。这题有一个很大的问题就在于,最后有用的只有五种物品,但是物品的编号却又很多。处理的方法有几种,一种是离散化,但是这个太SB了。。为了处理这么弱的数据还要排序重标号实在得不偿失。另一种是直接就标号,但是面临的问题就是,需要用的五种标号在能标之前就要被用到,就涉及到了一个问题,如何略过前面的部分,先处理后面的。。

两种方案:1、全读到一个数组里面,然后再将这个数组重新处理。这个方法可以是可以,但是浪费时间也浪费空间。

                   2、先直接不读前面的部分,读后面的,然后关文件,再开一遍,把前面的读进来。我这里用的就是后者。

我们知道pascal处理这个问题很简答,只要reset一下就好。但是C++需要先关闭文件,再全部重新关联一遍。因此学会了fclose……fclose之后重新freopen就好了。

还有更悲剧的,pascal中跳过一样直接readln就好,但是C++貌似读个回车是不好使的。。。还得挨个字符跳,不知有没有好的其他的方法……

我的方法:

for (int i = 0; i < m; i++)
{char ch = '\0';while (ch != '\n') scanf("%c", &ch);
}

这两个问题处理了之后依旧卡了很长时间,很简单……遇到一个USACO的exit code,我最开始觉得可能是那块的库他没有,但是后来发现是超内存了。。。(注意:以后如果在USACO遇到exit code 127就是超内存了)剩下的DP就简单了,dp[i1][i2][i3][i4][i5]就是五样东西各这些个的时候需要的最少花费。

代码:

/*
TASK:shopping
LANG:C++
*/
#include <iostream>
#include <fstream>
#include <climits>
using namespace std;int n,m;
int no[1200], cost[120];
int need[6];
int data[120][6];
int dp[14][14][14][14][14];
const int inf = INT_MAX;void init()
{scanf("%d\n", &m);for (int i = 0; i < m; i++){char ch = '\0';while (ch != '\n') scanf("%c", &ch);}scanf("%d", &n);for (int i = 0; i < 120; i++) no[i] = -1;for (int i = 0; i < n; i++){int x,y,w;scanf("%d%d%d", &x, &y, &w);no[x] = i; need[i] = y;cost[m + i] = w; data[m + i][i] = 1;}fclose(stdin);freopen("shopping.in", "r", stdin);scanf("%d", &m);for (int i = 0; i < m; i++){int num;scanf("%d", &num);for (int j = 0; j < num; j++){int x,y;scanf("%d%d", &x, &y);if (no[x] != -1)data[i][no[x]] += y;}scanf("%d", &cost[i]);}m += n;for (int i1 = 0; i1 <= need[0]; i1++)for (int i2 = 0; i2 <= need[1]; i2++)for (int i3 = 0; i3 <= need[2]; i3++)for (int i4 = 0; i4 <= need[3]; i4++)for (int i5 = 0; i5 <= need[4]; i5++)dp[i1][i2][i3][i4][i5] = inf;
}void solve()
{dp[0][0][0][0][0] = 0;for (int i1 = 0; i1 <= need[0]; i1++)for (int i2 = 0; i2 <= need[1]; i2++)for (int i3 = 0; i3 <= need[2]; i3++)for (int i4 = 0; i4 <= need[3]; i4++)for (int i5 = 0; i5 <= need[4]; i5++)if (dp[i1][i2][i3][i4][i5] < inf)for (int i = 0; i < m; i++){int t1 = i1 + data[i][0];int t2 = i2 + data[i][1];int t3 = i3 + data[i][2];int t4 = i4 + data[i][3];int t5 = i5 + data[i][4];dp[t1][t2][t3][t4][t5] = min(dp[t1][t2][t3][t4][t5], dp[i1][i2][i3][i4][i5] + cost[i]);}
}void print()
{printf("%d\n", dp[need[0]][need[1]][need[2]][need[3]][need[4]]);
}int main()
{freopen("shopping.in", "r", stdin);freopen("shopping.out", "w", stdout);init();solve();print();return 0;
}

转载于:https://www.cnblogs.com/Skyprophet/archive/2011/05/23/2054698.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode—238. 除自身以外数组的乘积

238. 除自身以外数组的乘积 题目描述&#xff1a; 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。…

黑马程序员_java基础笔记(15)...银行业务调度系统_编码思路及代码

—————————— ASP.NetAndroidIOS开发、.Net培训、期待与您交流&#xff01;—————————— 1&#xff0c;面试题目&#xff1a;银行业务调度系统 模拟实现银行业务调度系统逻辑&#xff0c;具体需求如下&#xff1a; 银行内有6个业务窗口&#xff0c;1 — 4号窗口…

一次非常有意思的sql优化经历

原文:一次非常有意思的sql优化经历场景 我用的数据库是mysql5.6&#xff0c;下面简单的介绍下场景 课程表 create table Course(c_id int PRIMARY KEY,name varchar(10))数据100条 学生表: create table Student(id int PRIMARY KEY,name varchar(10))数据70000条 学生成绩表SC…

Go Out Otherwise Shut Up

Shut Up For Ever! Work ,Work, Right Now! 下面盗用一下PLMM的格言给自己Add Oil。 a za a za fighting! Forge Ahead,Never Retreat! 这两句还是蛮有气势的&#xff0c;哈哈。 转载于:https://www.cnblogs.com/Farseer1215/archive/2005/05/07/150413.html

setCharacterEncoding和setContentType

request.setCharacterEncoding&#xff08;&#xff09;是设置从request中取得的值或从数据库中取出的值 response.setContentType("text/html;charsetgb2312")是设置页面中为中文编码 前者是设置动态文字&#xff08;参数&#xff0c;数据库&#xff09;&#xff0c…

LeetCode—239. 滑动窗口最大值(困难)

239. 滑动窗口最大值&#xff08;困难&#xff09; 题目描述&#xff1a; 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值 。 …

intellij idea搭建springboot

intellij idea2018.3创建springboot项目1.new > spring initilizer > web > spring web initializer运行项目方法一&#xff1a;导航板上的命令台图标&#xff0c;输入命令&#xff1a;mvn springboot:run,即可看到running,浏览器测试控制器方法&#xff0c;这种方法暂…

logstash

http://www.cnblogs.com/fangjian0423/p/logstash-elasticsearch-build.html http://chenlinux.com/2013/07/11/howto-filter-count-in-logstash/

连连看路径求解的算法

这是路径求解的算法做一个简单的介绍,适合入门者;首先是 x to x ,这个是横向比较直连然后是 y to y ,这个是竖向比较直连然后是 1个折点算法很简单;比如7x3的000100000000000000001p1 是 3,0p2 是 6,2那么折点是000100x0000000000x001折点1是 6,0 ,折点2是 3,2注意这个值和p1,p…

LeetCode—240. 搜索二维矩阵 II

240. 搜索二维矩阵 II 题目描述&#xff1a; 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 考察重点&#xff1a;简单的二维矩阵搜索 func SearchMatr…

Android开发:什么是IBinder

上回书简单描述了进程间传递类对象的原理&#xff0c;这回在讲Parcel之前&#xff0c;先要讲一个东西&#xff1a;IBinder。IBinder是什么呢&#xff1f;首先要明白&#xff0c;Android的远程调用&#xff08;就是跨进程调用&#xff09;就是通过IBinder实现的&#xff0c;下面…

Debug调试

先设置断点&#xff0c;然后Debug调试 step into&#xff1a;进入子函数step over&#xff1a;越过子函数&#xff0c;但子函数会执行step return&#xff1a;跳出子函数转载于:https://www.cnblogs.com/android-for-dh/p/4482519.html

python matplotlib绘图大全(散点图、柱状图、饼图、极坐标图、热量图、三维图以及热图)...

//2019.7.14晚matplotlib七种常见图像输出编程大全 七种图形汇总输出如下&#xff1a; import numpy as np #导入数据结构nmupy模块import matplotlib.pyplot as plt #导入matplotlib图像输出模块plt.rcParams["font.sans-serif"]["SimHei"] #输出图像的标…

Java入门需掌握的30个基本概念[转]

Java的白皮书为我们提出了Java语言的11个关键特性(1)Easy:Java的语法比C的相对简单&#xff0c;另一个方面就是Java能使软件在很小的机器上运行&#xff0c;基础解释其和类库的支持的大小约为40kb&#xff0c;增加基本的标准库和线程支持的内存需要增加125kb。(2)分布式:Java带…

LeetCode—241. 为运算表达式设计优先级

241. 为运算表达式设计优先级 题目描述&#xff1a; 给你一个由数字和运算符组成的字符串 expression &#xff0c;按不同优先级组合数字和运算符&#xff0c;计算并返回所有可能组合的结果。你可以按任意顺序 返回答案。 考察重点&#xff1a;(递归分治) 以符号位分割为左右…

报错:不是可以识别的内置函数名称

!!创建函数的时候不需要加dbo.&#xff0c;但在访问的时候&#xff0c;标量函数要加.dbo的 自己写完的函数&#xff0c;调用后报错提示&#xff1a;不是可以识别的内置函数名称 例&#xff1a;SELECT JS_ID A.ID, JSHM A.JSHM, JS_MC A.JS_MC, XY_DM …

C++右值引用与转移语义

std::forwad? C11 中定义的 T&& 的推导规则为&#xff1a; 右值实参为右值引用&#xff0c;左值实参仍然为左值引用。 参考&#xff1a; 右值引用与转移语义转载于:https://www.cnblogs.com/glensblog/p/11098359.html

gltail安装

是基于Ruby,所以服务器需要安装有ruby,国内需要把ruby的源改为淘宝的 Centos上 yum groupinstall "Development Tools" yum -y install freeglut libX11-devel mesa-libGL-devel perl-Time-HiRes freeglut-devel readline-devel libffi-devel libtool bison libxml…

微软获得O/R映射技术专利 业界担忧阻碍技术进展

一组微软员工申报了O/R映射技术的专利。 该专利将对业界现有的O/R映射产品造成怎样的影响目前尚不清楚&#xff0c;但有业界专家担忧微软将借此专利打压竞争对手。 这份专利档案是被网友无意间在专利信息查询网站FreshPatents.com上找到的&#xff0c;点此可以浏览原文。该专利…

Linux下安装Perl模块

# perl -MCPAN -e install Time::HiRes# perl -MCPAN -e install File::Tail# perl -MCPAN -e install Date::Parse# perl -MCPAN -e install Net::Netmask转载于:https://www.cnblogs.com/nwf5d/archive/2011/06/07/2074259.html