2013年湖南省第九届程序设计大赛 I Interesting Calculator (dp)
来源:互联网 发布:暗物质与灵魂 知乎 编辑:程序博客网 时间:2024/05/17 15:40
题意:
给你一个x,y 给你三十个操作,每种操作的花费为c[i],求x变成y所需的最小花费和最小花费下的操作次数
方法:
我最开始以后变成i的花费dp[i]= dp[i-j] + j变成i的花费, 后面wa很多次了之后才发现j不一定比i小
因为有个操作是*0,递推的时候是从x递推到y,没有经过x变成0,0变成y, 所以这个操作会使得递推时出现错误;
除去这个操作之外的所以操作都不会是的i变小
所以我们只要算出x-y的解 和(x-0)操作+ 0-y操作的解,取最优的解即可
代码:
#include <cstdio>#include <cstring>#define maxn 111111#define LL long longint A[33];LL dp[maxn], d[maxn];int deal(int x, int t){if(t<= 10)return x*10+(t-1);else if(t<= 20)return x+(t-11);elsereturn x*(t-21);}int main(){//freopen("C:\\Users\\Monkey\\Desktop\\in.txt","r",stdin);//freopen("C:\\Users\\Monkey\\Desktop\\out1.txt","w",stdout);int T= 0;int x, y;while(scanf("%d %d",&x,&y)!=EOF){T++;for(int i= 1; i<= 30; i++)scanf("%d",&A[i]);memset(dp, -1, sizeof(dp));memset(d, 0, sizeof(d));dp[x]= 0;//printf("%d\n",deal(12,1));for(int i= x; i<= y; i++)if(dp[i]!= -1)for(int j= 1; j<= 30; j++){//printf()int k= deal(i, j);if(k<= y){if(dp[k]== -1){dp[k]= dp[i]+ A[j];d[k]= d[i] +1;}else {if(dp[i]+ A[j]< dp[k]){dp[k]= dp[i]+ A[j];d[k]= d[i] +1;}else if(dp[i] + A[j]== dp[k]){if(d[i]+1< d[k])d[k]= d[i]+ 1;}}}}LL ans1= dp[y], anst1= d[y];// x-y的所需花费 memset(dp, -1, sizeof(dp));memset(d, 0, sizeof(d));dp[0]= 0;for(int i= 0; i<= y; i++)if(dp[i]!= -1)for(int j= 1; j<= 30; j++){//printf()int k= deal(i, j);if(k<= y){if(dp[k]== -1){dp[k]= dp[i]+ A[j];d[k]= d[i] +1;}else {if(dp[i]+ A[j]< dp[k]){dp[k]= dp[i]+ A[j];d[k]= d[i] +1;}else if(dp[i] + A[j]== dp[k]){if(d[i]+1< d[k])d[k]= d[i]+ 1;}}}}LL ans2= dp[y] + A[21], anst2= d[y]+1;//x-0然后再0-y 的所需花费 LL ans, anst;if(ans1> ans2)ans= ans2, anst= anst2;else if(ans1< ans2)ans= ans1, anst= anst1;else {ans= ans1;anst= anst1< anst2? anst1: anst2;}printf("Case %d: %lld %lld\n",T,ans, anst);}return 0;}
0 0
- 2013年湖南省第九届程序设计大赛 I Interesting Calculator (dp)
- 湖南省第九届大学生计算机程序设计竞赛 Interesting Calculator
- Interesting Calculator( 湖南省第九届大学生计算机程序设计竞赛)
- 最短路 ~Interesting Calculator 湖南省第九届程序设计竞赛
- CSU 1336: Interesting Calculator(BFS啊 湖南省第九届大学生计算机程序设计竞赛)
- 第九届湖南省大学生程序设计大赛
- 湖南省第九届程序设计大赛:字符识别?
- 2013年湖南省第九届程序设计大大赛 G 好老师
- 2013年湖南省第九届程序设计大赛 F Funny Car Racing(最短路)
- 2013年湖南省第九届程序设计大赛 J 搞笑版费马大定理
- 【非技术贴】记湖南省第九届程序设计大赛
- 第九届湖南省ACM—ICPC程序设计大赛 好老师
- 好老师(湖南省第九届程序设计大赛原题)
- 湖南省第九届程序设计大赛 搞笑版费马大定理
- 2013年湖南省第九届程序设计大赛 H 高桥和低桥 (线段树+二分)
- 2012年湖南省第八届程序设计大赛 I Collecting Coins(dfs+bfs)
- 一行盒子 (湖南省第九届大学生程序设计大赛原题)
- 第九届湖南省ACM—ICPC程序设计大赛 搞笑版费马大定理
- android 不打开Shared sdcard功能,内置SD卡中预制资源,删除资源,恢复出厂设置恢复
- onvif规范的实现:使用gSOAP创建SOAP调用实例
- 什么是好技术
- plsql 如何设置自动替换文本 的经验方法
- * (leetcode )Merge Two Sorted Lists
- 2013年湖南省第九届程序设计大赛 I Interesting Calculator (dp)
- android HttpURLConnection
- hibernate之级联cascade和关系维持inverse
- “邀请”引发的一些思考希望能起到抛砖引玉的效果
- nofloow标签存在的作用解释
- ubuntu安装软件
- URI和URL的区别
- shell脚本练习:判断某IP段主机在线情况
- Unicode与UTF-8